# Soll ich besser glTranslatef() oder gluLookAt() benutzen?



## magma (21. Mai 2007)

Einen schönen guten Tag an alle.

Ich programmiere hier ein 3D Szenario mit Java und opengl.
Ich habe hier eine kleine Plattform erstellt und auf ihr zwei Würfel plaziert.
Ich will mich nun auf die Würfel zu bewegen und wieder von ihnen weg.

Wie fange ich das am besten an.

1.	Soll ich mit glTranslatef(0.0f, 0.0f, z_wert); alles in der z-Richtung verschieben.
	Die Plattform und die sich darauf befindlichen Gegenstände.

2.	Oder ist es besser gluLookAt(); zu verwenden und so ein darauf zu und ein davon 
	„weg-bewgen“ zu erreichen

Ich will mich dann spaeter auch in dem Szenario Drehen. 


magma


----------



## Marco13 (21. Mai 2007)

Hm - mach doch, was du willst :wink: Also, du hast geschrieben
_Ich will *mich* nun auf die Würfel zu bewegen und wieder von ihnen weg. _
Angenomen, du würdest das jetzt mit 
glTranslatef(0.0f, 0.0f, z_wert);
machen. Wenn du dann _zusätzlich_ die Plattform auf dich zu bewegen willst, darfst du irgendwelche wild-wüsten z-Werte ausrechnen, so dass es stimmt. 

Ich würde ganz pauschal und pragmatisch sagen: Wenn man die _Szene_ bewegen will, verwendet man glTranslatef. Wenn man sich _selbst_ (also den Betrachter) bewegen will, verwendet man gluLookAt (oder eine analoge Methode).  Das entspricht genau der OpenGL-eigenen Trennung zwischen der MODELVIEW_MATRIX und der PROJECTION_MATRIX (oder wie datt Ding hieß...)


----------



## Evil-Devil (21. Mai 2007)

Ich würde immer glTransform benutzen, weil du mit gluLookAt eigentlich nur die Betrachtungsmatrix definierst. 

Und ob sich die Welt nun um dich dreht oder du dich um die Welt ist doch nur eine Frage der Perspektive 

Und bei glulookat wäre der Rattenschwanz den du nebenbei bräuchtest noch viel größer. Denn warum sollte man die Perspektive jedesmal wenn sich etwas bewegt neu berechnen, anstatt nur das was sich bewegt hat zu errechnen?


----------



## magma (22. Mai 2007)

Hallo Evil-Devil.
...bei glulookat wäre der Rattenschwanz...
Darauf wollte ich hinaus. Was für das Programm mehr oder weniger Aufwand ist.

Danke an euch beide.


magma


----------



## Marco13 (22. Mai 2007)

Was genau meint ihr denn nun mit "Rattenschwanz"? Die ein, zwei furz-Matrixmultiplikationen, die innerhalb von 42 Mikrosekunden gemacht werden können? Wenn sich der Betrachter bewegt, bewegt sich der Betrachter, und wenn sich die Szene bewegt, bewegt sich die Szene. IMHO ein schönes Beispiel für "KISS". Man kann es sich (und demjenigen, der den Code vielleicht mal irgendwann nachvollziehen muss) einfach machen, oder aus falscher Sparsamkeit etwas schreiben, wovon man nach ein paar Monaten selbst nichtmehr weiß, was man dort gemacht hat. Aber ... egal ... nochmal (diesmal mit einer etwas anderen Bedeutung) : Man kann ja machen, was man will...


----------



## Evil-Devil (22. Mai 2007)

Ich meine zb. diesen Thread: 
http://www.idevgames.com/forum/archive/index.php/t-8731.html

FÜr eine einfache Szene ist gluLookAt einfach zu nutzen...aber bei einer sehr umfangreichen Szene wie sie in jedem Spiel nunmal vorkommt sind einzelne Aufrufe von glTranslate und glRotate einfacher.

gluLookAt führt zwar zum selben Resultat wie glTranslate, ruft aber auch noch glRotate mit auf.

Ich persönlich finde es besser, wenn die Welt sich um den Betrachter dreht und nicht der Betrachter um die Welt.


----------



## Marco13 (22. Mai 2007)

Es kommt (wenn überhaupt) dann nicht darauf an, wie einfach oder umfangreich die Szene ist. Wie in dem verlinkten Thread auch gesagt wurde ist es hauptsächlich "Geschmacksache". Aber ein bißchen kommt es vielleicht auch darauf an, was man machen will. Bei einer Flugsimulation wäre vielleicht glRotate/Translate besser, und bei einem First-Person-Shooter eher gluLookAt (nur als Beispiel) ...

EDIT: Abgesehen davon war die Frage im Anfangspost ja auch eine andere: Dort ging es darum, ob die Szene oder die Kamera bewegt werden soll. Und ich finde, er sollte die Kamera bewegen (und NUR darauf wollte ich hinaus). Ob der das nun mit gluLookAt oder "per Hand" macht, ist egal....


----------

