使用 glut 函数 glutMouseFunc() 将窗口坐标转换为 3D 世界坐标
Posted
技术标签:
【中文标题】使用 glut 函数 glutMouseFunc() 将窗口坐标转换为 3D 世界坐标【英文标题】:convert window coordinates to 3D world coordinates with glut function glutMouseFunc() 【发布时间】: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 窗口坐标,然后将其与鼠标单击的坐标进行比较会更容易吗?
【问题讨论】:
与***.com/q/2093096/524368相同的问题(原则上) 【参考方案1】:鼠标点击不对应于 3d 空间中的一个点,而是对应于一条射线。
无论如何,您都使用gluUnProject。
如果您知道光标下的场景“深度”,那么您可以通过 winZ
参数传递深度来获取点击的 3d 位置。
如果您不知道深度,请在 winZ
参数中传递 0.0 以获取射线的起点,并传递 1.0 以获取“终点”。如果这条射线击中任何东西,你必须自己计算。
【讨论】:
以上是关于使用 glut 函数 glutMouseFunc() 将窗口坐标转换为 3D 世界坐标的主要内容,如果未能解决你的问题,请参考以下文章
将 glutTimerFunc 与 glutMouseFunc 一起使用