OpenGL (GLUT) Projektnachprogrammierung - Bloxorz

Davicito

Erfahrenes Mitglied
Halle Leute,

in meinem Projekt geht es um einen Cubos der auf Steinplatten fortbewegt werden kann. Es soll möglich sein, diesen rechteckigen Quader nach links und rechts zu bewegen, sowie nach hinten und nach vorne zu kippen. Da das Koordinatenkreuz des Cubos an der linken hinteren Ecke, unten sitzt, verändert dich der Koordinatenursprung des Quaders ständig. Das macht es schwierig zu verstehen, wenn sich der Quader beliebig oft bewegt hat, an welcher Position er sein Ursprung hat und welche Achse mann drehen muss um die Bewegung so hinzubekommen, wie oben beschrieben ist.

Hier auf dieser Seite - http://www.albinoblacksheep.com/games/bloxorz - finden Ihr ein gleichnamiges online game, welches ich versuche in OpenGL nach zuprogramieren.

Ich kann mittlerweile den Quader nach links und rechts bewegen. Aber er lässt sich wegen meines Problems noch nicht nach hinten oder nach vorne kippen. Und durch die vorwärts bzw. rückwets Bewegung würd der Quader manchmal unter den Steinplatten und machmal überden Steinplatten gezeichnet.

Meine Frage: Gibt es da ein Algorithmus für derartige Vorwärts-, Drehbewegungen oder kann man nach jeder Bewegung den Koordinatenursprung, des Quaders, an eine andere Ecke, des Quaders, ansetzten um die Bewegung zu ermöglichen?

Vielen Dank in Vorraus.
 
Hallo Davicito.

Ich habe mich derzeit noch nicht mit OpenGL auseinandergesetzt, aber vielleicht kann ich dir ja trotzdem helfen wenn du noch ein paar Infos zur Verfügung stellst.

Ich frage einfach mal dumm:

Wird der Quader bei der Bewegung nach Links bzw. Rechts auch gekippt?
-Dann hättest du ja die Funktionalität bereits und müsstest nur x mit y tauschen.

Kannst du nicht einfach die Eckkanten des Quaders dynamisch erfassen? Immerhin hat es ja prinzipiell immer den gleichen Aufbau. Boden am Boden etc..

Gruß, random-access.
 
Hi... es soll möglich sein den Quader nach vorne, hinten, rechts und links zu kippen.
Das Tauschen der X und Y ist nicht möglich, da es sich um ein Koordinatenursprung handelt. Möglich wäre es aber das Koordinatensystem an eine andere Ecke des Würfels zu Translatieren und wieder in Grundstellung zurück zu drehen, damit eine neue Vorwärts-, Drehbewegung möglich ist.

Eckkanten können glaube ich unter OpenGL nicht dynamich erfasst werden, falls ich Dich richtig verstanden habe.
Oder erkläre mir das mal bitte näher.

Gruß, Davicito
 
Hi Davicito,

wie gesagt stelle ich nur Vermutungen an, da ich mich nicht in der Materie auskenne.
Hi... es soll möglich sein den Quader nach vorne, hinten, rechts und links zu kippen.
nach links und Rechts funktioniert es ja bereits, wie aus deinem ersten Post zu entnehmen ist.
Das Tauschen der X und Y ist nicht möglich, da es sich um ein Koordinatenursprung handelt. Möglich wäre es aber das Koordinatensystem an eine andere Ecke des Würfels zu Translatieren und wieder in Grundstellung zurück zu drehen, damit eine neue Vorwärts-, Drehbewegung möglich ist.
Daraus könnte man schließen, das Koordinatensystem um Z 90° zu translatieren sprich zu drehen, sodass die Vorwärts-/Rückwärtsbewegung eine Links-Rechts-Bewegung ist, welche ja bereits funktioniert. Und anschließend übersetzt du dein Koordinatensystem wieder in die Ausgangsposition.
Eckkanten können glaube ich unter OpenGL nicht dynamich erfasst werden, falls ich Dich richtig verstanden habe.
Oder erkläre mir das mal bitte näher.

Gruß, Davicito
Angenommen dein Quader liegt so im Koordinatensystem:
Code:
A[0,0,0]
B[0,1,0]
C[1,0,0]
D[1,1,0]
E[0,0,1]
F[0,1,1]
G[1,0,1]
H[1,1,1]
Mein Ansatz war, davon ausgehend, das du erst die Eckpunkte des Quaders, welche auf einer linie sprich X,Y oder Z-Achse liegen aus der Position innerhalb deiner Szene ausliest.
Daraus ergeben sich die Eckpunkte der Flächen:
Boden, ABCD
Vorn, ABEF
Rechts, BDFH
Links, ACEG
Hinten, CDGH
Oben, EFGH

Nachdem du einmal Nach Rechts gekippt hast, liegt der Quader so im Koordinatensystem:
Code:
A[0,1,1]
B[0,1,0]
C[1,1,1]
D[1,1,0]
E[0,2,1]
F[0,2,0]
G[1,2,1]
H[0,2,1]
Woraus sich wiederum die Eckpunkte der neuen Flächen ergeben:
Boden, HDBF
Vorne, BFEA
Links, DBAC
Rechts, FEGH
Hinten, CDGH
Oben, EACG

Wenn du weist welche Punkte wo liegen, kannst du deine bisherige Funktionalität problemlos weiterverwenden.

Ich hoffe wir reden nicht aneinander vorbei ;)

Gruß, random-access.
 
Hallo,
erstmal vielen Dank für Eure Hilfestellungen.
Ich habe das vor 4 Wochen selber hinbekommen und der Vorschlag von Random-access war im Ansatz richtig. Es verhält sich so, dass mit einer Switch-case-Funktion, nach jeder Drehbewegung, die Lage des Würfels abgefragt wird. Dann wird der Koordinatenursprung passend an die Stelle des Würfels positioniert, damit eine weitere Bewegung des Würfel's möglich ist (wird eine Bewegung nach vorne oder links durchgeführt, steht der Ursprung an der rechten, vorderen Ecke und bei eine Bewegung nach hinten oder links, an der hinteren, linken Ecke).

Liebe Grüße, Davicito.

PS. Falls Euch das Spiel interessiert, es gibt eine spielbare Version als Flashanimation unter
folgendem Link: http://www.albinoblacksheep.com/games/bloxorz

Dies war auch übrigens mein Vorbild für mein Programm.
 
Zurück