Ich habe wieder ein kleines Problemchen mit Kamera. Wie ich gelesen habe, kann man die Kamera mit lookat von Glut ansteuern oder auch direkt mit push und popMatrix
Also das Problem ist, wenn ich LookAt benutze verändert er die Matrix von Objekten, es heist lookAt macht nichts anderes als die Objekte verschieben oder skalieren oder auch rotieren so dass es für das Auge so aussieht als ob die Kamera sich bewegt, in wirklichkeit bewegen sich die Objekte. Da ich einen Obj-Exporter schreibe und die Matrix von jeden einzelnen objekt brauche ist die lookat keine gute Lösung ist, finde ich.
Kleines Beispiel. Das objekt steht im punkt 0,0,0. Ich verschiebe die Kamera auf 1,1,1. Die Matrix von objekt wird dabei ebenfalls verändert. Ich brauche jedoch eine unverfäschte matrix, so dass mein Objekt auch auf dem 0,0,0 steht. Wenn ich den jedoch exportiere, steht er im Punkt 1,1,1. Ich dachte immer die Kamera sei unabhängig von objekten, wenn ich die lookat benutze, war wohl ein Fehler. Was kann man da machen
PS: Sorry für die Grammatik zu schnell geschrieben.
Nun, du kannst dir deine Matrix immer auch selbst berechnen. In deinem anderen Thread hatte ich dir ja bereits den Hinweis auf die in WGT enthaltene MatheLib gegeben. (Ist übrigens die Java-Version meiner wesentlich umfangreicheren (und bisher unveröffentlichten) Coolmath-Bibliothek für C++.)
aber in opengl ist es nunmal so das sich nicht die kamera sondern die welt bewegt
das heißt wenn dein object bei 0,0,0 steht und du die kamera verschieben willst, verschiebst du nicht die kamera sondern die welt also verschiebst du sozusagen immer das objekt,
du könntest nun aber damit dein object bei einer kameraverschiebung nach dem exportieren wieder auf 0,0,0 steht umrechnungsfaktoren einbeziehen.
Beispiel:
Dein Objekt steht auf 0,20,-50
du verschiebst die kamera um -5,10,20
nun steht dein objekt also auf -5,30,-30
wenn du nun die umrechnungsfactoren die sich aus der summer aller deiner kammeraverschiebungen ergeben wieder auf die objectposition anwendest erhälst du beim exportieren
X -5+(-5*-1) = 0 Y 30+(10*-1) = 20 Z -30+(20*-1) = -50
korrigier mich falls ich falsch liege oder es einfach falsch verstanden habe
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könnte man das nicht lösen, indem man gluLookAt in der Projektionsmatrix nutzt? Nur mal so als generelle Frage. So könnte man Weltkoordinaten und darstellung trennen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
@Flash: Ja, das ist theoretisch möglich, allerdings könnte dies die Lichtberechnung stören. Im View-Space ist die Kameraposition die man für Specularbeleuchtung braucht nämlich einfach (0,0,0). D.h. für korrekte Specular-Beleuchtung muss man Shader einsetzen.
@costan: Mit einer eigenen Mathelib sollte das ganze aber relativ einfach zu lösen sein, du kannst einfach in Model, View und Projectionmatrix aufteilen. Die Klasse MatrixStack von WGT unterstützt das sogar, du kannst die drei Matrizen getrennt verwalten. Immer wenn du rendern willst liest du einfach matrixstack.getModelView() sowie matrixstack.getProjection() aus und übergibst die Matrizen an OpenGL. Mit matrixstack.getModel() kannst du dir die Weltmatrix holen.
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.