Umlaufbahn / Pfad verfolgen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

CypressArt

Betreff: Umlaufbahn / Pfad verfolgen

BeitragFr, Feb 24, 2006 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

wie kann ich eine Sphere an einem "unsichtaren" Pfad entlang laufen lassen?

So in der Art Umlaufbahn, wie der Mond die Erde umkreist...
wobei die Umlaufbahn nicht zwingend kreisförmig sein muss....

Dachte auch an das vorzeichnen einer Linie welcher als Pfad dient und diesen dann hidden setzten...hmmmm


Hab die suche fleissig abgegrast: umlaufbahn,planeten,pfad verfolgen...aber: nop!
(no comment) -> Google Search Bot!!
 

Scope

BeitragFr, Feb 24, 2006 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde das einfach berechnen, erfordert ein bisschen mathe, aber ich denk die koordinaten einzelner punkte einer ellipse lassen sich berechnen, wenns auch vll etwas aufwendig ist.
edit: hier wirst du sicher fündig, was die berechnungen angeht: http://de.wikipedia.org/wiki/Ellipse

CypressArt

BeitragFr, Feb 24, 2006 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmmm...

muss mich präziser ausdeutschen:

Idee
Es soll eine Mischung aus den 3 Spielen sein:
- Zuma
- Arkanoid
- Tetris

Also farbige Kugeln (Murmeln) flitzen auf ner 3D Achterbahn umher.
Als Spieler stehst du in der Mitte der Bahn.
Mit der Maus kannst du der Bahn folgen und farbige Bälle auf die rumflizenden "abschiessen" mit Kugeln, die aus der mitte des Feldes entspringen. Sind 3 od. 4 Kugeln der gleichen Farbe zusammen, lösen sie sich auf. Natürlich gibts auch sog. special Bälle, welche spezielle fähigkeiten auslösen (Schnellfeuer, Slowmotion der Bälle, Zeitlich begrenze änderung der Bahn, etc).
Ziel ist es, bevor die erste Kugel eine bestimmte Anzahl von Runden gedreht hat, alle Kugeln aufgelöst zu haben.

(Konzeptpics folgen)
(no comment) -> Google Search Bot!!
 

Darren

BeitragFr, Feb 24, 2006 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das so machen:
Erstelle einen Pivot am Mittelpunkt deiner Kreisbahn. Die Kugel positionierst du so weit von deinem Pivot entfernt, wie groß der Radius ungefähr sein soll. Jetzt definierst du deine Kugel als Child des Pivots und wenn du jetzt den Pivot drehst, dreht sich die Kugel mit ihm mit. Um zu einer Elipse zu kommen, musst du einfach die Kugel mit Sinus oder Cosinus pro Umdrehung des Pivots einmal näher hin und einmal wieder weiterweg zu bewegen. Aber die Kugel nicht den Pivot! Dann sollte alles funzen!
MFG Darren

CypressArt

BeitragMo, Feb 27, 2006 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

wenn der pfad vorgegeben ist durch ein B3D (export Meshobjekt)?
Wie kann ich die einzelnen abschnitte als Punkt angeben, und die Camera oder ein Dummyenity diesen folgen lassen?
(no comment) -> Google Search Bot!!

Bob

BeitragMo, Feb 27, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

mal auf die schnelle. Vielleicht hilft es ja.

Den Path gibts hier (2KB)
http://www.iomagic.de/bb/path.b3d

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2

Global Path = LoadMesh("path.b3d")
Global Ball = createsphere()
EntityColor ball,255,0,0

Licht = CreateLight()
Global cam = CreateCamera()
CameraRange cam,0.1,500
Global cPos = 0
Global maxPos
Global Frametime = 20

Global plane = CreatePlane(16)
tex = CreateTexture(128,128)
SetBuffer TextureBuffer(tex)
Rect 0,0,64,64
Rect 64,64,64,64
ScaleTexture tex, 50,50
EntityTexture plane,tex
SetBuffer BackBuffer()

Read_Pos

While Not KeyHit(1)
   If Not Animating(ball) Then
      Animate ball,3,1,0
      runde = runde +1
   EndIf
   PointEntity cam,ball
   UpdateWorld()
   RenderWorld
   Text 0,0,"Der Ball hat " + runden + " runden gemacht."
   flip
Wend



Function Read_Pos()
   surf = GetSurface(Path,1)
   maxPos = countvertices(surf)
   Local MaxY#=999999
   For i = 0 To maxPos-1
      x#=VERTEXX# (Surf, i)
      y#=VERTEXY# (Surf, i)
      z#=VERTEXZ# (Surf, i)
      If y<maxY Then maxY = y
      PositionEntity ball,x,y,z
      SetAnimKey ball, i*Frametime,1,1,0
   Next
   DebugLog "I  maxPos " + i + " " +Maxpos
   x#=VERTEXX# (Surf, 0)
   y#=VERTEXY# (Surf, 0)
   z#=VERTEXZ# (Surf, 0)
   SetAnimKey ball, i*Frametime,1,1,0
   AddAnimSeq ball,maxPos*Frametime
   PositionEntity Plane,0,maxY-5,0
   PositionEntity Cam,0,maxY+10,0
End Function
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

x-pressive

BeitragDi, Feb 28, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Vom Ansatz her ist Bob's Lösung gar nicht schlecht, würde ich eigentlich auch so machen, weil es am flexibelsten ist und man damit alle möglichen Formen abfahren kann, nicht nur kreisförmig -allerdings:

1. Die XYZ-Positionen der Vertices am Programmstart in Variablen (Types oder Arrays) einlesen und das Mesh dann löschen. Das spart Performance, vor allem bei vielen Waypoints.

2. Die Bewegung ist sehr kantig. Man müsste die Bewegung zwischen den einzelnen Waypoints mit Splines runden. Wir hatten schon mal einige simple Spline-Formeln gepostet, such mal nach "Spline".

Eine Splinekurve ist eine "Linie", die zwei Punkte verbindet, wobei man aber mit zusätzlichen Punkten noch die "Steigung" der Kurve zwischen diesen Punkten definiert. Also wird aus der Linie dann eine weiche Kurve.

Diese Zwischenpunkte könntest du eigentlich auch schon im 3D-Editor als Vertices einfügen. Beim Lesen der Vertices in Blitz musst du halt dann so vorgehen, das du z.B. immer vier Punkte auf einmal liest. Der erste und der vierte sind Anfangs- und Endpunkt des momentanen Streckenabschnittes und die beiden Punkte dazwischen würde man dann als Rundungsparameter für die Splinekurve benutzen.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

CypressArt

BeitragDo, März 02, 2006 7:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hey...genial..!!

Danke für den BspCode!

Je nach feinheit (mehr waypoints) des Pfades, ist das abfahren nicht so "ruckelig"...

hmm..mein Pfad Modell ist als Spline definiert, die optische Bahn wird als Mesh dazugeladen... Wink

Werd mir das einlesen in Arrays noch genauer unter die Lupe nehmen, um zu sehen wie es sisch mit der Performance verhält...
(no comment) -> Google Search Bot!!

x-pressive

BeitragDo, März 02, 2006 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, mit "Spline" meinte ich nicht die Splines im 3D-Editor. Das hat in diesem Fall nichts damit zu tun. Ich meinte, das du die Koordinaten der Waypoints in deinem Programm als Parameter für eine Spline-Formel benutzt, um weiche Bewegungen zu erzeugen.

Schau mal hier.

Ein Bezier-Spline wird durch beispielsweise vier Koordinaten definiert: Startpunkt, Endpunkt und zwei "Umlenkpunkte", die bestimmen, wie "gebogen" die Linie zwischen Start- und Enpunkt verläuft. Diese vier Parameter übergibst du einer kleinen Spline-Funktion, z.B. wie dieser hier:

Code: [AUSKLAPPEN]
Function bezier(x1,y1,x2,y2,x3,y3,x4,y4)
  cx#=3*(x2-x1)
  bx#=3*(x3-x2)-cx#
  ax#=x4-x1-cx#-bx#
  cy#=3*(y2-y1)
  by#=3*(y3-y2)-cy#
  ay#=y4-y1-cy#-by#
  For i#=0 To 1 Step .02
     x=((ax#*i#+bx#)*i#+cx#)*i#+x1
    y=((ay#*i#+by#)*i#+cy#)*i#+y1
    If i#>0 Then Line oldx,oldy,x,y
    oldx=x
    oldy=y
  Next
End Function


...und erhältst so eine weiche Bewegung. Die Splines in deinem 3D-Editor funktionieren nach dem selben Prinzip, davon hast du aber nichts, weil nach dem Export kein Spline mehr vorhanden ist, sondern nur noch viele (meist SEHR viele!) Gitterpunkte in deinem Mesh.

Wenn du mit einer Bezier-Formel arbeitest, kommst du mit sehr wenigen Punkten aus (ein weicher Kreis lässt sich schon mit vier Waypoints erzeugen), weil alles zwischen den einzelnen Waypoints interpoliert wird. Ohne Bezier-Formel bräuchtest du Unmengen an Punkten, was vielleicht die einfachste, aber nicht die professionellste Lösung wäre.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

CypressArt

BeitragDo, März 02, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm..bei einem kreis u.ä. seh ich keine probleme für deinen vorschlag.

für das modell verschiedener achterbahnen mit loopings, drehungen etc. wird es "unmöglich" eine formel zu definieren...

zur zeit erstelle ich meine "splines" im max 5.0 und exportiere diese via pipline als b3d...
versuche noch rauszukriegen wieviele waypunkte eine typische achterbahn ungefähr hat....

mein pfad hat max. 143 vertices
hier mal eine typische achterbahn (als Mesh NICHT der Pfad selbst!):
user posted image

hier mit eingezeichnetem pfad (weiss):
user posted image
(no comment) -> Google Search Bot!!

x-pressive

BeitragDo, März 02, 2006 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, du hast mich noch immer nicht richtig verstanden. Vielleicht schwer zu erklären ohne Zeichnung.

Es geht nicht darum, die ganze Achterbahn mit einer einzigen Formel zu definieren -es geht darum, möglichst wenig Punkte zu benutzen. Eine Bezier-Formel errechnet zwischen jeweils zwei Punkten statt einer geraden Linie eben eine KURVE.

Die Formel wird jeweils zwischen zwei benachbarten Punkten angewendet und sorgt so für viele "virtuelle" Zwischenstufen, die die Bewegung viel weicher und runder machen. Dadurch kommt man mit viel weniger "realen" Punkten aus.

Such einfach mal mit Google nach "bezier kurve", du wirst sicher merken, das dir das wie gerufen kommt.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group