Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SKiD

Frischling

  • »SKiD« ist der Autor dieses Themas
  • Private Nachricht senden

1

08.01.2013, 16:20

[C++/OpenGL] Near/Far Plane visualisieren

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.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »SKiD« (08.01.2013, 16:51) aus folgendem Grund: Abonnement hinzugefügt