2

我试图从屏幕上的鼠标单击将光线追踪到 3D 空间。据我了解,默认位置和方向如下所示:

胶未投影

从此代码:

    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];

    GLfloat winX, winY;
    GLdouble near_x, near_y, near_z;
    GLdouble far_x, far_y, far_z;

    glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
    glGetDoublev( GL_PROJECTION_MATRIX, projection );
    glGetIntegerv( GL_VIEWPORT, viewport );

    winX = (float)mouse_x;
    winY = (float)viewport[3] - (float)mouse_y;

    gluUnProject(winX, winY, 0.0, modelview, projection, viewport, &near_x, &near_y, &near_z);
    gluUnProject(winX, winY, 1.0, modelview, projection, viewport, &far_x, &far_y, &far_z);

我的问题是如何更改近平面和远平面的位置和角度,以使所有鼠标点击看起来都来自相机在 3D 空间中的位置和角度?

具体来说,我正在寻找一种方法将投影平面的中心定位在 Z 轴下方 65° 沿线 (0,0,1) -> (0,0,-tan(65°)) [-tan (65°) ~= -2.145],近平面和远平面都垂直于通过这些点的视线。

4

1 回答 1

2

我的问题是如何更改近平面和远平面的位置和角度,以使所有鼠标点击看起来都来自相机在 3D 空间中的位置和角度?

将投影和模型视图矩阵输入 gluUnProject 可以解决这个问题。具体来说,您将用于渲染的投影和模型视图矩阵传递给 gluUnProject,以便未投影的坐标与这些矩阵描述的局部坐标系的坐标相匹配。

于 2013-06-12T22:28:06.927 回答