OpenGL を使用する MFC c++ アプリケーションを作成しています。このプログラムは、3D でのオブジェクトの描画と操作を可能にします。現在、オブジェクトが描画されているのと同じ座標空間で、画面上でマウスをクリックした場所の座標を見つけたいと考えています。
これまでのところ、glReadPixels と gluUnProject の組み合わせを使用してきましたが、オブジェクトが既に描画されている場所でマウスをクリックした場合にのみ機能しています。オブジェクトの外側をクリックすると、取得された座標が完全にオフになります。
だから、オブジェクトが画面上のどこにでもある座標空間で座標を見つけることができるように、コードを変更する方法を考えていました。これが私が使用しているコードです:
GLint viewport[4];
GLdouble ox, oy, oz;//the coordinates I need
GLfloat winZ = 0.0;
::glGetIntegerv(GL_VIEWPORT, viewport);
::glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
::glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
GLfloat winX = (float)point.x;//point.x and point.y are the mouse coordinates
GLfloat winY = (float)viewport[3] - (float)point.y;
::glReadPixels( winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ, modelviewMatrix, projectionMatrix, viewport, &ox, &oy, &oz);