OpenGL +kameraposition
-
Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.
-
OpenGL ist eine Low Level API - wenn du dich nicht um die Details kümmern willst nutze einen Bibliothek wie Ogre3D oder z. B. den Nvidia Scene Graph
-
AlexXXx schrieb:
Hi,
Ich habe auf einer diversen Website gelesen, das man im OpenGL
die "Kameraposition" selbst errechnen muss, in dem man die inverse ModelView matrix mit dem Nullpunkt [0 0 0 1] multipliziert.
Gibt es da echt keinen anderen Weg oder eine fertige Funktion dafür ??
GrußSchau mal hier: http://www.opengl.org/resources/faq/technical/viewing.htm
-
megaweber schrieb:
Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.
Hä komisch, wenn ich das so in mein Programm eingebe, kommen da so komische Errors und so.
-
So danke fuers verschieben hier her, jetzt habe ich mich anmeldenmüssen *ggg*
Öhm die kameraposition an sich zu berechnen it kein Problem.
Ich finde meine Vorgehensweise nur etwas umständlich.Ich berechne die determinante, (Länge des Vektors skalieren)
Und dann nich die adjungierte, aber eben die Elemente, welche bei der Multiplikation mit
[0 0 0 1] nicht null werden.Mir ist dann noch aufgefallen dass die ModelView Matrix ja transponiert im speicher liegt. Hmmmmmmm
Im Grunde müsste ja auch genügen:
Modelview wie sie im Speicher liegt also M[16]
M[5] entspricht f|a b c d| |e f g h| |i j k l| |m n o p| V=|m n o|=Kameraposition V ------ ||V||[t]Euklid[/t]=UnitVektorKameraposition
Aber kann ich die Kameraposition micht immer irgendwie bei meinen Modelview Operationen mitführen ohne dass ich ne euklidische Norm berechnen muss oder
eine Matrix teilweise invertieren.???
Ich meine ist ja nicht schlimm vom Zeitaufwand, da di Matrix eine feste größe hat, und das ganze ziemlich flott gemacht werden kann.
Ist aber trotzdem irgendwie unschön.
@Kóyaánasqatsi
^^ Du mußt ja auch eine Programmiersprache benutzen ^^
-
@David_pb
Danke, hätte erst lesen, dann schreiben sollen :xmas1:
-
Kóyaánasqatsi schrieb:
megaweber schrieb:
Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.
Hä komisch, wenn ich das so in mein Programm eingebe, kommen da so komische Errors und so.
.. versteh ich nich ...
-
Hmmm Also kurtz, kannman sagen dass die ModelView Matrix in ihrer
4-ten (letzten) Zeile die Kameraposition enthält ??
Mein erstes schreiben hat Feher, wills aber nicht verbessern, damit man den Fortschritt sieht, und eure antworten nicht ihren Sinn verlieren *g*Gruß
-
^^Okay der Vektor V hat die kameraposition aber im falschen kkoordinatensystem. Die können ja nicht nur verschoben zueinander sein, sondern auch skaliert und rotiert. habe mich immer gefragt, wiso bei dier invertierung dann plötzlich andere Werte (Also auch die der linken oderen 3:3 untermatrix) berücksichtig werden, wenn rotiert wird. (Beim berechnen durch inverse matrix)
Ich habs ^^.
Die inversion muss man also machen
Gruß
-
Alexander_Kiebler_m82 schrieb:
Ich habs ^^.
Die inversion muss man also machen
GrußNicht unbedingt. Rotationsmatrizen lassen sich recht einfach invertieren (Transponieren). Und Translationsmatrizen auch. Wenn du also weißt, was du tust, kannst du auch einfach die einzelnen Matrizen invertieren und in umgekehrter Reihenfolge zusammen multiplizieren.
Oder du benutzt einfach die gluLookAt funktion, wie hier auch schon erwähnt.