wenn ein OpenGL Kontext erzeugt wird, wird die Viewport Transformation initial auf die Fenstergröße gesetzt. Der äquivalente Aufruf wäre: glViewport(0, 0, width, height).
Für VertexData, ModelViewMatrix und ProjectionMatrix sorgt man ja selber.
Ogl macht dann alleine den ViewportTransform oder wie?
Aber das hilft mir irgendwie nicht weiter. An welchem Punkt (welche werte brauche ich jetzt) um die mit den screen koordinaten zu vergleichen?
*** Edit ***
Moment mal. Oder soll ich glViewport dazu benutzen um die punkte für mich auf der cpu umzurechnen, um
die dann mit den screen coords zu vergleichen? Aber wie genau soll das gehen? (ne void methode hilft irgendwie wenig)
[QUOTE=mymaksimus;95452]
Aber das hilft mir irgendwie nicht weiter. An welchem Punkt (welche werte brauche ich jetzt) um die mit den screen koordinaten zu vergleichen?
…
Moment mal. Oder soll ich glViewport dazu benutzen um die punkte für mich auf der cpu umzurechnen, um
die dann mit den screen coords zu vergleichen?[/QUOTE]
Diese Umrechnung wirst du CPU-Seitig selbst machen müssen, aus den Informationen, die du woanders ja auch an glViewport übergibst.
Hmja, sorry, das ist viel Text und einige Matrizen, an denen man erstmal wenig bis gar nichts sieht (und “das Thema 3D und Viewing” zieht sich ja jetzt schon durch einige Threads … ). Und wie schon weiter oben erwähnt ist (mir) trotzdem nicht mal ganz klar, was du willst. (Welt zu Sceen? Das macht OpenGL, siehe Bild in Fancys Beitrag. Screen zu Welt? Das geht erstmal nicht. weil ein Punkt auf dem Bildschirm einen Strahl definiert…). Ich werde dir NICHT empfehlen, irgendeine EXE von irgendeiner Seite einfach so zu starten, aber … die Screenshots von http://www.songho.ca/opengl/gl_transform.html sehen aus, als ob diese Programme hilfreich sein könnten (ggf. kann man sie ja selbst compilieren…)
Ja es ist ein Strahl - wenn es 3d ist. Bei 2d wird es doch möglich sein anhand eines BILDSCHIRMPUNKTS den
WELTPUNKT herauszufinden … oder nicht? irgendwie geht es ja auf jedenfall…
Ich versuch nachher mal noch einmal ganz konkret zusammenzufassen was ich hab und was ich will…
Eben nicht. Aus einem 2D-Punkt kann man keinen 3D-Punkt machen. Es werden ja unendlich viele 3D-Punkte auf denselben 2D-Punkt abgebildet. Nämlich alle, die auf dem Strahl liegen. Aber vielleicht klärt sich das ja dann noch.
Ja, das ist hat mit dem zu tun, was du (vermutlich ;)) vorhast. Das „winz“ ist die z-Koordinate eines Punktes in Fensterkoordinaten. Normalerweise übergibt man dort einmal 0 und einmal 1, und hat dann zwei Punkte, mit denen man den Strahl definieren kann. Dort, wo jetzt „modelMatrix“ steht, würde ich eigentlich die Camera- oder View-Matrix erwarten (nochmal: Das sind die Inversen voneinander). Vermutlich ist nur die Variable ungünstig benannt. Und … der viewport… zynisch na rate mal was DAS wohl sein kön… zynismus unterdrück Das ist der Viewport. Also praktisch die Fenstergröße. Bzw. das, was bei glViewport übergeben wurde…
Das x und y ist bestenfalls theoretisch interessant (wenn man irgendwelche abgefahrenen Sachen mit ““unter-Fenstern”” (im Sinne von “Renderbereichen”) machen will. Nimm x,y einfach als 0,0 an (auch wenn’s natürlich “besser” ist, das in der Methode nicht zu tun, sondern mit x und y zu rechnen, egal ob sie 0 sind oder nicht)
Ich glaube ich hatte zwischenzeitlich mal ein paar werte geändert, bezüglich fov und so weiter, deshalb hier nochmal eine komplett beispiel datensammlung:
ausgabe nach glUnProject: x: 1.8016068, y: 2.3981187, z: 0.0020001999,
Übrigens: in glUnProject werden die matrizen doch nochmal invertiert, oder nicht? (siehe Zeile 355)
Aber bei den originalmatrizen, kommen noch seltsamere wahnsinns werte raus…
Die 0.002000… kommt offensichtlich von der original projektions matrix…
Schnapp dir doch einfach ein Blatt Papier und rechne das an einem Beispiel durch, da steckt doch eigentlich nichts hinter.
(Stimmt so natürlich nur für die orthogonale Projektion, sonst muss noch die perspektivische Division beachtet werden. Und das FOV bei orthogonaler Projektion keinen Sinn macht, hat Marco schon erwähnt.)
was ist denn jetzt bitte die “viewport matrix” ? ._.
was ist Peye?
Und P world coordinates, sollte doch im (-1, 1) bereich sein…
und… und…
warum klappt dann die methode von lwjgl nicht?
ja fov macht nicht wirkich viel sinn. ich benutze es aber quasi als “scale” variable… denn je größer fov desto größer
werden ja left, right, top bottom… ist ja auch egal…
World Space wäre das Koordinatensystem zwischen Model- und View- Matrix. Eye Space das nach der Modelview Matrix. Das Bild oben und der verlinkte Text veranschaulichen das.
Mit ein bisschen Phantasie hätte man drauf kommen können, dass mit P_eye ein Punkt im Eye Space und mit P_wc ein Punkt in Window Coordinates gemeint sein könnte.
M_viewport gehört zur Viewport Transformation. Damit werden die Normalized Device Coordinates auf die Window Coordinates abgebildet. Erklärt wird das auch in dem Link oben. Wie sich die Matrix zusammensetzt, wird z.B. hier ausführlich gezeigt.