ich möchte gern eine planare textur projektion berechnen.. aber nicht via OpenGL sondern von hand
Also ich habe lauter vertices die im raum verteilt liegen und einen "Projektor" an XYZ der in richtung XYZ strahlt und eine höhe und breite besitzt.. Alle vertices die der jetzt anleuchtet sollen entsprechend die textur koordinaten bekommen.
Wie das ganze theoretisch funktioniert ist kein thema, bei mir hapert es eher an der umsetzung.. wenn es eine orthogonale projektion ist bekomme ich das auch problemlos hin, nur sobald halt der projektor verdreht ist hört es bei mir auf und ich hab ka wie ich da nun berechne welches vertex wo auf fer projektions plane liegt..
Also an sich setzt du nur deine Projektorquelle als Kamera (View-Matrix), dazu die richtige Projektions-Matrix. Dann musst du in OGL nur folgende Matrix noch dazu mulen:
TP =
0.5 0 0 0.5
0 0.5 0 0.5
0 0 0.5 0.5
0 0 0 1
Wäre also: Vertex' = TP * Proj * View * Model * Vertex.
Die xy-Werte von Vertex' sind jetzt die Texturkoordinaten die du suchst.
Bei DX ist die TP-Matrix leicht anders, weil der Texturspace dort mit y-Achse nach unten verläuft und nicht wie in OGL nach oben.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Aya hat geschrieben:
Hich möchte gern eine planare textur projektion berechnen.. aber nicht via OpenGL sondern von hand
Dennoch, wenn du dir mal anschaust, wie die einzelnen Matrizen berechnet werden und sie dann "von hand" im Programm erstellst und anwendest, könnte aus dem, was Pallaeon vorgeschlagen hat, was werden.
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 network • my 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
Das war auch so gemeint, dass die Matrixberechnung "per Hand" zu machen ist und nicht via OGL-Funktionen. Das OGL und DX sollte sich wirklich nur auf den Texture-Space beziehen in den Systemen.
Die Formeln für die Matrizen sollten doch alle im Wiki hier zu finden sein?
Ach ja und ein typischer Projektor dürfte doch eher persp. Proj sein und keine orthogonale, oder? Aber kannst ja testen, musst ja nur die Matrix anpassen.
_________________ __________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup
Ich denke, du solltest das so machen, wie du auch in OpenGL eine Matrix aufsetzen würdest. Erst baust du dir eine Modelviewmatrix mit der Drehung und der Verschiebung des Projektors. Dann baust du dir die Projektionsmatrix indem du in den im Artikel genannten Formeln deine Werte einsetzt und dann multiplizierst du beide miteinander (aber ich bin mir gerade nicht über die Reihenfolge sicher, ich glaube aber ModelView * Projection).
Dann musst du nurnoch deine Vertices mit der resultierenden Matrix multiplizieren und theoretisch bekommst du dann Werte von 0 - 1 heraus, die sich wunderbar auf Texturkoordinaten mappen lassen sollten.
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 network • my 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
was is denn der unterschied zwischen view und model matrix?
Die projection matrix hab ich jetzt mal so wie im wiki bei glOrtho beschrieben berechnet... die modelview matrix muß ich ja jetzt anhand der kamera position/rotation berechnen oder?
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, die Modelview berechnest du mittels deiner Position und drehung.
Aber warum benutzt du für einen Projektor eine Orthogonale Projektion? Das verstehe ich nicht ganz... Naja, komischer Projektor halt
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 network • my 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
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich würde meinen, glOrtho ist schon OK. Der Untersched zwischen Model- und ViewMatrix ist, das die ViewMatrix nur von der Position/Rotation der Kamera abhängig ist und die ModelMatrix ZUSÄTZLICH noch von der Position/Rotation des Objekts. Also wenn Du mehrere Objekte hast, braucht jedes davon eine eigene Modelmatrix, die zur Viewmatrix hinzumultipliziert wird (Push/Pop usw.) Aber ich glaube das brauchen wir hier garnicht.
klappt soweit, hab nur noch ein kleines problem... was geb ich denn bei der Ortho-Matrix als höhe/breite an? (bzw Top, Left, Bottom und Right)
Ich würd jetzt spontan die breite von meiner textur benutzen, aber.. ist das sinnvoll?
Bzw, ich würd gern jetzt meinen "projektor" im 3Dview anzeigen, position ist ja kein problem, aber wenn ich ihn als Quad darstellen will, was nehm ich da als höhe/breite von dem quad? Also ich meine... wie schließe ich von meiner höhe/breite meiner ortho-matrix auf die höhe/breite von meinem quad in pespective 3D?
Aya~
PS: Um euch kurz zu erklären warum ich kein OpenGL für die berechnung nehmen kann, obwohl ich es in 3D darstelle... es ist ein plugin für ein programm welches zwar einen 3D Space hat, der aber nur zur darstellung von dingen da ist. Die berechnung des ganzen muß halt trotzdem ohne OpenGL passieren
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.