【问题标题】:convert window coordinates to 3D world coordinates with glut function glutMouseFunc()使用 glut 函数 glutMouseFunc() 将窗口坐标转换为 3D 世界坐标
【发布时间】:2012-01-11 15:00:23
【问题描述】:

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

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 窗口坐标,然后将其与鼠标单击的坐标进行比较会更容易吗?

【问题讨论】:

标签: c++ opengl graphics mouse glut


【解决方案1】:

鼠标点击不对应于 3d 空间中的一个点,而是对应于一条射线。

无论如何,您都使用gluUnProject

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

如果您不知道深度,请在 winZ 参数中传递 0.0 以获取射线的起点,并传递 1.0 以获取“终点”。如果这条射线击中任何东西,你必须自己计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多