C++ 使用glut函数glutMouseFunc()将窗口坐标转换为三维世界坐标

C++ 使用glut函数glutMouseFunc()将窗口坐标转换为三维世界坐标,c++,opengl,graphics,mouse,glut,C++,Opengl,Graphics,Mouse,Glut,我正在尝试使用glut函数glutMouseFunc()获取鼠标单击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; } } glutMouseFunc(mouse); 该函数获取鼠标单

我正在尝试使用glut函数glutMouseFunc()获取鼠标单击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;
    }
}
  glutMouseFunc(mouse);
该函数获取鼠标单击的窗口坐标,我将其与glut函数glutMouseFunc()一起使用,如下所示:

void mouse(int button, int state, int x, int y){
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
    mouse_x=x;
    mouse_y=y;
    }
}
  glutMouseFunc(mouse);
我的问题是如何修改鼠标函数给出的坐标,以便在3D世界中使用它们。我的确切目的是:能够看到我是否点击了世界上绘制的3D形状


[编辑]将三维对象的坐标转换为二维窗口坐标,然后将其与鼠标单击的坐标进行比较是否更容易?

鼠标单击不对应于三维空间中的点,而是对应于光线

在任何情况下,您都可以使用

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

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