Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 13:23

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Mär 25, 2008 15:55 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Hallo zusammen,

meine Frage betrifft diesmal eher guten OpenGL Stil. Ich habe mir eine 3D-Scene aufgebaut, und möchte mich gerne da drin bewegen. Könnte man also mit gltranslate, glrotate oder gar gluLookAt machen. Aber welche Matrix sollte dabei aktiv sein. Als erstes habe ich meine Welt in der ModelView Matrix aufgebaut, dann habe ich zum Schluß in die Projektionsmatrix gewechselt und mich darin bewegt. Diese Variante empfinde ich als sauber und übersichtlich getrennt.
Es geht aber auch anders, indem ich den Ausgangspunkt meiner Welt erst mal weit weg schiebe und dann zeichne. Ich selbst (oder meine Kamera) befindet sich aber immer noch im Koordinatenursprung der Weltmatrix.
Wo finden also jetzt Viewpoint-Transformationen statt? Was ist denn richtiger, oder was ist eher zu empfehlen bzw. trifft die Konvention?

Vielen Dank schon mal,

Hefe

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 25, 2008 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ich frage mich gerade, wie du die Projektionsmatrix nachher verändern willst um dir deine Szene z.B. von Hinten anzusehen ?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 25, 2008 16:30 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Na ich kann mich doch nach belieben hinter die Scene bewegen und umdrehen. Das ging zumindest auch in der Projektionsmatrix.

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 25, 2008 21:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde das in der Projektionsmatrix erledigen. Dann hast du den Vorteil, die Kameratransformationen und die Modeltransformationen getrennt zu haben, sodass du in Shadern beispielsweise die Modeltransformationen rückgängig machen kannst.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 25, 2008 23:24 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Ah ja, danke. Von Shadern bin ich zwar noch weiit, weiiit entfernt, aber mit der getrennten Betrachtung bzw. Behandlung von Szene und Kamerafahrten kann ich mich leichter anfreunden. Wenn beides erlaubt ist bleib ich bei der Projektionsmatrix.

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 26, 2008 00:54 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Eigendlich ist es kein sauberer Stil, die Projektions matrix zum bewegen der kamera zu verwenden. Wenn man die Cam, als gewöhnliches objekt betrachtet. welches man mit translate und rotate bewegen kann. setzt sich die gl_ModelViewMatrix so zusammen:

CamMatrixInverse * ModelMatrix * ProjectionMatrix

Der Grund warum die ModelView und Projection matrizen in OpenGL getrennt sind ist, dass die ModelMatrix durch glRotate glTranslate u.Ä. verändert werden kann. Die multiplikation mit der projection matrix erfolgt erst unmitelbar vor der benutzung.

Die Camera matrix nun mit der projektion matrix zu implementieren geht nur in wenigen ausname fällen, da die reihen folge der matrizen nicht geändert werden kann. (Möglich sind z.B. 90 grad rotierte kamera ansichten zum erzeugen von Cubemaps in einem geometry shader)

Zurück zum altem GL... Da es keine getrennte cam und model matrix gibt, muss man die CamMatrix als erstes setzten. Wenn man nicht weiß wie man die inverse eine Matrix berechnet, kann man sich einfach damit behelfen, dann man die Welt und nicht sich selbst bewegt.

Grundsätzlich muss man die Projektionsmatrix nur dann ändern wenn man die kammera verändert (anderes Bildverhälltnis, Zoom....) Solnge Objeckte bewegt werden muss immer die ModelVieMatrix benutzt werden.

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 01, 2008 13:00 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Vielen Dank nochmal für eure Antworten. Im "Red Book" habe ich noch folgendes gefunden:

Zitat:
Viewing and modeling transformations are inextricably related in OpenGL and are in fact combined into a single modelview matrix


Damit hätten wir das wohl geklärt, obwohl ich die Idee, eine von der Modellwelt unabhängige Matrix zur Kameraführung zu nutzen, eigentlich sehr verlockend fand.

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 02, 2008 18:09 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Wieso wird die Projektionsmatrix rechts an die modelview matrix ranmultipliziert? Es wird doch zuerst der Vertex mit der Modelview matrix transformiert, und erst anschließend mit der Projektionsmatrix. Daher hätte ich erwartet dass die Projektionsmatrix links an die Modelviewmatrix ranmultipliziert wird.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 17, 2008 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
oc2k1 hat geschrieben:
Grundsätzlich muss man die Projektionsmatrix nur dann ändern wenn man die kammera verändert (anderes Bildverhälltnis, Zoom....) Solnge Objeckte bewegt werden muss immer die ModelVieMatrix benutzt werden.

*mal Thread rauskram*

Wie verhält sich das denn, wenn man eine Kamera hat die sich in Abhängig von der Szene bewegt? Ich hatte überlegt einen 3D Beat 'em Up Prototypen zus chreiben und für die Kamera beschlossen das sich ihr maximaler und minimaler Zoomfaktor in Abhängigkeit zur Entfernung der beiden Spielfiguren errechnet. Wenn ich deine Aussage richtig verstanden habe, müsste ich dann:

[Neue Figuren Positionen berechnen]
[Kamera in Abhängigkeit der Figuren platzieren/drehen]
[Welt zeichnen]

Wobei sich mir dann die Frage stellt ob ich die Welt relativ oder absolut zur Kamera zeichnen muss :?

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]