Ich habe ein Quad auf der y = -50-Ebene. Im Moment möchte ich nur die Koordinaten eines Mausklicks auf dem Quad erhalten. Ich habe es in begrenztem Umfang geschafft. Das Problem ist, dass die Transformationen, die ich beim Zeichnen des Quads anwendete, nicht berücksichtigt werden. Ich kann einige Konstanten hinzufügen und es funktionieren lassen, aber ich lasse den Benutzer die Szene um die x- und y-Achse mit glRotatef() drehen, so dass die Koordinaten durcheinander geraten, sobald eine Rotation stattfindet.Ray Kommissionierung mit gluUnProject()
Hier ist, was ich tue jetzt:
Ich nenne gluUnProject() zweimal, einmal mit z = 0 und einmal mit z = 1.
gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 0, modelView, projection, viewport, &x1, &y1, &z1);
gluUnProject(mouseX, WINDOW_HEIGHT - mouseY, 1, modelView, projection, viewport, &x2, &y2, &z2);
Normalized Strahlvektor:
x = x2 - x1;
y = y2 - y1;
z = z2 - z1;
mag = sqrt(x*x + y*y + z*z);
x /= mag;
y /= mag;
z /= mag;
Parametric Gleichung:
float t = -(camY)/y;
planeX = camX + t*x;
planeY = camY + t*y;
planeZ = camZ + t*z;
Dabei wird (camX, camY, camZ) die Kameraposition an gluLookAt() übergeben.
Ich möchte planeX, planeY und planeZ die Koordinaten des Klicks auf das Quad, in dem gleichen Koordinatensystem, das ich verwendet habe, um das Quad zu zeichnen. Wie kann ich das erreichen?
Wann greifen Sie die ModelView-Matrix? Vor oder nach dem 'glRotatef()'? – genpfault