Hallo zusammen,
ich hänge derzeit irgendwie an dem Versuch die "Near" beziehungsweise "Far Plane" zu visualisieren. Ich habe zwei verschiedene OpenGL Fenster und demnach auch zwei verschiedene Kameras. Die Near und Far Plane der Kamera des ersten Fensters soll in dem zweiten Fenster dargestellt werden. Das mache ich mithilfe von einfachen Linien, die die Kanten der der Plane zeichnen. Allerdings funktioniert die Berechnung nicht ganz. Für diese habe ich mir
HIER die Referenz bezogen (siehe Abschnitt "Shape of the Frustum" und "Geometric Approach - Extracting the Planes").
Die Visualisierung funktionier dennoch nicht wirklich. Bisher habe ich folgenden Code in C++ geschrieben:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
mWidth = 400;
mHeight = 300;
[...]
float tNearH = 2 * tan (45.0f / 2) * 0.1f;
float tNearW = tNearH * ((float)mWidth / (float)mHeight);
cVector3f tLightCamPos( camPosX, camPosY, camPosZ );
cVector3f tLightCamDir(camPosX - camCenterX, camPosY - camCenterY, camPosZ - camCenterZ );
cVector3f tLightCamUp( 0.0f, 1.0f, 0.0f ); // wie auch in GluLookAt beschrieben
cVector3f tLightCamRi( 0.0f, 0.0f, 1.0f ); // bin mir nicht sicher, ob der Right Vektor genauso gemeint ist
cVector3f tNearDir = tLightCamPos + tLightCamDir * WND_NEAR_DIST;
cVector3f tNTL = tNearDir + (tLightCamUp * (tNearH / 2)) - (tLightCamRi * (tNearW / 2));
cVector3f tNTR = tNearDir + (tLightCamUp * (tNearH / 2)) + (tLightCamRi * (tNearW / 2));
cVector3f tNBL = tNearDir - (tLightCamUp * (tNearH / 2)) - (tLightCamRi * (tNearW / 2));
cVector3f tNBR = tNearDir - (tLightCamUp * (tNearH / 2)) + (tLightCamRi * (tNearW / 2));
cRay tBottom(tNBL, tNBR); //Erstellen der untersten Linie des Fensters
cRay tRight(tNBR, tNTR); //Erstellen der rechten Linie des Fensters
cRay tTop(tNTR, tNTL); //Erstellen der obersten Linie des Fensters
cRay tLeft(tNTL, tNBL); //Erstellen der linken Linie des Fensters
glColor3f(1.0f, 1.0f, 0.0f);
tBottom.fDraw();
tRight.fDraw();
tLeft.fDraw();
tTop.fDraw();
|
Jedoch bekomme ich irgendwelches gekrackel dabei heraus und ich habe keine Ahnung woran das nun genau liegt, vermute aber, dass das eventuell etwas mit dem Direction-Vektor zu tun haben könnte.
Kann mir jemand Licht ins Dunkel bringen?
Vielen Dank,
SKiD.
// EDIT:
Jetzt funktioniert zumindest die Darstellung:
Camera1
Allerdings gibt es Verzerrungen, wenn die Kamera gedreht wird:
Camera2
Das Viereck schaut immer in die gleiche Richtung, sollte sich allerdings mit der Kamera mitdrehen.