我试图通过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窗口坐标,然后将其与鼠标点击的坐标进行比较会更容易吗?
答案 0 :(得分:0)
鼠标单击不对应于3d空间中的点,而是对应于光线。
无论如何,您使用gluUnProject。
如果您知道光标下的场景“深度”,那么您可以通过winZ
参数传递深度来获得点击的三维位置。
如果您不知道深度,请在winZ
参数中传递0.0以获得光线的开始,并在1.0中获得“结束”。如果这条光线碰到任何东西,你就必须自己计算。