使用glut函数glutMouseFunc()将窗口坐标转换为3D世界坐标

时间:2012-01-11 15:00:23

标签: c++ opengl graphics mouse glut

我试图通过glut函数glutMouseFunc()获取鼠标的3D坐标单击C ++ / OpengGL。所以我创建了一个这样的函数:

void mouse(int button, int state, int x, int y){
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
    mouse_x=x;
    mouse_y=y;
    }
}

该函数获取鼠标点击的窗口坐标,并将其与glut函数glutMouseFunc()一起使用,如下所示:

  glutMouseFunc(mouse);

我的问题是如何修改鼠标功能给出的坐标,以便在3D世界中使用它们。我的确切目的如下:能够看到我是否点击了世界上绘制的3D形状。

[编辑]将3D对象的坐标转换为2D窗口坐标,然后将其与鼠标点击的坐标进行比较会更容易吗?

1 个答案:

答案 0 :(得分:0)

鼠标单击不对应于3d空间中的点,而是对应于光线。

无论如何,您使用gluUnProject

如果您知道光标下的场景“深度”,那么您可以通过winZ参数传递深度来获得点击的三维位置。

如果您不知道深度,请在winZ参数中传递0.0以获得光线的开始,并在1.0中获得“结束”。如果这条光线碰到任何东西,你就必须自己计算。