Umlaufbahn / Pfad verfolgen
Übersicht

![]() |
CypressArtBetreff: Umlaufbahn / Pfad verfolgen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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!): ![]() hier mit eingezeichnetem pfad (weiss): ![]() |
||
(no comment) -> Google Search Bot!! |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group