Frage

Ich habe diese Ansicht Satz:

glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective

und ich bekomme eine Bildschirmposition (sx, sy) von einem Mausklick.

ein Wert von z gegeben, wie kann ich x und y in 3D-Raum von sx und sy berechnen?

War es hilfreich?

Lösung

Sie sollten gluUnProject verwenden:

Als erstes berechnen die "unprojection" auf die nahe Ebene:

GLdouble modelMatrix[16];
GLdouble projMatrix[16];
GLint viewport[4];

glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projMatrix);

GLdouble x, y, z;
gluUnProject(sx, viewport[1] + viewport[3] - sy, 0, modelMatrix, projMatrix, viewport, &x, &y, &z);

und dann auf die andere Ebene:

// replace the above gluUnProject call with
gluUnProject(sx, viewport[1] + viewport[3] - sy, 1, modelMatrix, projMatrix, viewport, &x, &y, &z);

Jetzt haben Sie eine Zeile in Weltkoordinaten bekam, die alle möglichen Punkte Spuren aus Sie könnte haben Sie auf. So, jetzt müssen Sie nur zu interpolieren: Angenommen, Sie sind gegeben die z-Koordinate:

GLfloat nearv[3], farv[3];  // already computed as above

if(nearv[2] == farv[2])     // this means we have no solutions
   return;

GLfloat t = (nearv[2] - z) / (nearv[2] - farv[2]);

// so here are the desired (x, y) coordinates
GLfloat x = nearv[0] + (farv[0] - nearv[0]) * t,
        y = nearv[1] + (farv[1] - nearv[1]) * t;

Andere Tipps

Dies wird am besten durch die maßgebliche Quelle beantwortet, OpenGL-Website .

Dieser ist tatsächlich abhängig von der Projektionsmatrix, nicht die Model-View-Matrix. http://www.toymaker.info/Games/html/picking.html sollten Ihnen helfen -. es ist D3D-centric aber die Theorie ist die gleiche

Wenn Sie schauen, mausbasierte Kommissionierung zu tun, aber ich schlage vor, mit der Auswahl Rendering-Modus.

Edit: Wohlgemerkt, die Model-View-Matrix ins Spiel kommt, aber da deine Identität ist es kein Thema

.

libqglviewer hat eine gute Auswahl Rahmen, wenn das ist, was Sie suchen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top