Autor Beitrag
Blackbird
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Mo 02.12.02 14:02 
Bin gerade dabei ein kleines Spielchen zu programmieren und dabei ist mir aufgefallen , das man ja eigentlich gltranslte und glrotate gar nicht benutzen kann (da es sinnlos wäre), denn man muss ja die Objekte (z.B. Spieler, Gegenstände...) selbst bewegen - für Collision Detection zum Beispiel muss man die ganeuen Koordinaten kennen.

Wenn ich jetzt aber ein Object mit glTranslate verschiebe, kann ich ja nicht mehr die eigentlichen Koordinaten auslesen und damit nicht mehr genau bestimmen wo es jetzt ist, es sei denn, ich schreibe eine "eigene" translate Funktion, die auf den Positionsvektor einwirkt.

Quake 3 zum Beispiel benutz weder gltranslatef noch glrotatef...
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 02.12.02 17:26 
Da gibt es doch so was wie "Selection-Mode"... ich glaube, damit kannst du die Vertices ermittlen... schau di malwww.geocities.com/Si.../5759/kapitel10.html an, ich kenne mich damit nicht so aus, aber villeicht kanns helfen.

Außerdem: auf [url]www.idsoftware.com[/url] findest du irgendwo den Quelltext von QuakeIII. Zwar nur in C++, aber villeicht kannst du damit rausfinde, wie's ohne glRotate geht...
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Di 03.12.02 22:58 
Hi,

also für mein Snake3D hab ich viel glTranslate und glRotate benutzt...und ich wußte jedesmal die genauen koordinaten :)

Ich hab Keine ahnung ob's die feine methode ist, aber es geht auf jedenfall... jedesmal wenn ich etwas mit glTranslate verschiebe, mache ich das gleich dannach wieder rückgängig, so das glTranslate IMMER bei 0,0,0 startet...

Beispiel:
ausblenden Quelltext
1:
2:
3:
glTranslate(5,0,6);
glCallList(Bla);
glTranslate(-5,0,-6);


dasselbe mit glRotate... :)
(Kannst auch einfach glLoadIentity aufrufen, setzt auch alles auf 0)

Au'revoir,
Aya

PS: Das QuakeIII ohne diese sachen auskommt liegt denke ich mal daran, das es völlig anders aufgebaut ist... bei Quake werden die Koordinaten jedes Vertex'es berechnet und ejdesmal neu gezeichnet. das einzige was sich bewegt ist die Kamera, und die braucht man nicht mit glTranslate o.ä bewegen...