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

Aktuelle Zeit: Fr Jul 18, 2025 12:36

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Aug 23, 2008 22:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Oder auch: Warum ist der Z-Anteil der Projektionsmatrix bei X und Y gleich 0?

Hallo ihr,

Ich untersuche gerade aus Spaß an der Freude die Projektionsmatrizen von OpenGL. Bekanntermaßen gibt es zwei, die für Vertices interessant sind, Projektion und Modelview. In meiner Testumgebung sieht die Projektionsmatrix wie folgt aus (erstellt mit gluPerspective(60, 800/600, 0.1, 100.0)):
Code:
  1. [  1,2990  0,0000  0,0000  0,0000 ]
  2. [  0,0000  1,7321  0,0000  0,0000 ]
  3. [  0,0000  0,0000 -1,0020 -0,2002 ]
  4. [  0,0000  0,0000 -1,0000  0,0000 ]

Die Modelviewmatrix (Identitätsmatrix mit glTranslatef(0.0, 0.0, -5.0)):
Code:
  1. [  1,0000  0,0000  0,0000  0,0000 ]
  2. [  0,0000  1,0000  0,0000  0,0000 ]
  3. [  0,0000  0,0000  1,0000 -5,0000 ]
  4. [  0,0000  0,0000  0,0000  1,0000 ]


So wie ich das sehe, dürften X und Y nach der Projektion immernoch unabhängig von Z sein, also unabhängig davon, wie weit das Objekt eigentlich entfernt ist. Das ist mit aber schleierhaft, denn wie sollten die Dinge sonst kleiner werden? Diese Projektion arbeitet wie erwartet, aber nicht wie man aus den Matrizen schließen könnte, die Dinge werden kleiner je weiter sie weg sind.

Macht OpenGL hier noch irgendetwas von dem ich nix weiss oder kann ich einfach nicht gut genug mit Matrizen umgehen und erwarte hier was falsches?

Gruß Lord Horazont

[edit]
Gelöst... Ich habe vergessen, dass OpenGL zum schluss ja nochmal durch w teilt.

_________________
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: Mi Aug 27, 2008 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
manchmal frag ich mich auch, warum meine Zigarette kleiner wird, obwohl ich dran ziehe!?

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 27, 2008 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Erm, ja, also was zigaretten betrifft beschränkt sich meine Erfahrung eigentlich auf die allmorgendliche beobachtung der "Raucherecke" vor unserer schule... Was auch immer mir dein kommentar sagen sollte, vermutlich einfach nur "Erst denken - dann posten", obwohl ich vorher ja schon einige quellen konsultiert hatte.

Wobei mir an dieser stelle die frage in den sinn kommt, warum eigentlich das nicht über die Matrizen gelöst wird sondern so... Hat dazu wer "Insiderwissen"?

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: Mi Aug 27, 2008 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
ne das sollte nicht heißen "erst denken, dann posten", sondern mehr ein "versteh ich auch nicht". Muss an dieser Stelle leider zugeben, dass ich mich zwar einigemale mit den Projektionsmatrizen befasst habe, aber was deine Frage betrifft hab ich leider keine Antwort parat. Dachte eigentlich, dass der Thread so gut wie zu wäre, da du deine frage ja quasi selbst beantwortet hattest und hatte ma lust einfach was zu schreiben, auch wenn das in einem seriösen Forum wahrscheinlich unangebracht ist.

Da ich mich aber trotzdem weitergehend mit Matrizen für Projektionen auseinander setze werd ich mich hier aber nochmal melden, falls mir die Lösung in den Schoß fallen sollte.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 28, 2008 09:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Der Thread wurde schon als gelöst gemarkt aber ich denke ein bischen Infos wäre ned schlecht.
Erstmal sollte man in die Funktionspipeline von OpenGL schauen http://wiki.delphigl.com/index.php/Feste_Funktionspipeline.
Da sieht man, dass das Vertice mit der Modelview Multipliziert wird.
Nun hat man die globale Verticeposition und kann nun damit schon mal arbeiten, in der Pipeline sieht man z.B. Clippingplanes, die in der Szene ein Teil der Geometry wegcullen. Sowas habt ihr bestimmt schon gesehen, wenn man eine Sphere definiert hat und dann mit einer Clippingplane z.B. die eine Hälfte verwirft.
Nun multipliziert man die ProjectionView Matrix, welche wie der Name erahnen lässt, dafür sorgt, dass die Vertice 3Dimmensional auf unserem 2Dimmensionalen Monitor projeziert werden. Dabei werden die Verticepositionen so umgerechnet, das entsprechend der Bildschirmauflösung und Tiefenangabe die Z Werte entsprechend sich auf X und Y auswirken. Allerdings wird dies erst mit der division durch W vollständig korrekt. W ist die 4. Reihe einer Matrix und sieht in der regel so aus 0,0,0,x. Nun hat das Vertice eine X und Y Position auf dem Monitor und wir können tolle Test, wie clipping von allem, was ausserhalb der Sicht ist :)
Als ich ein Software Rasterizer gebastelt hatte, war die division mit W auch bei mir ein aufhänger ^^.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]