OpenGL获取离当前鼠标位置最近的世界三维点的三维坐标
OpenGL get 3D coordinates of nearest world 3D point to the current mouse Location
在OpenGL环境中,我看到可以将鼠标坐标转换为三维世界坐标(例如,使用OpenGL的MFC从鼠标的二维坐标获得三维坐标)。然而,当我只有一组GLPoint
和大量空白时,这是不起作用的:当我将鼠标悬停在空白上时,3D坐标没有意义。
如何获取离鼠标位置最近的三维点的坐标?
认识到将2D鼠标坐标"不投影"到3D世界需要额外的信息。屏幕上的2D位置对应于从3D中的近平面到远平面的直线上的无限多个点。这意味着,要获得三维点,还需要提供深度值。
gluUnProject
函数是实现这一点的方便方法,并为该winZ
提供了一个参数。0.0将在近平面上找到3D点,而1.0将在远平面上找到它。
gluUnProject(winX, winY, winZ, model, proj, view, objX, objY, objZ);
注意:如果gluUnProject
不可用,您可以用矩阵很容易地计算出同样的结果。来源
当鼠标用于与3D对象交互时,通常通过从深度缓冲区采样、将光线与场景几何体或基本体(如球体或长方体)相交来找到此深度值。如果目标是与点交互,可以在每个点周围使用一个球体。如果你只想在"某个地方"找到一个三维点,你可以决定一个深度值(可能在近平面上为0.0,也可能在远平面和近平面之间为0.5)。
相关文章:
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 如何使用qt缩放三维网格
- 三维数组中的C/C++DWORD到BYTE和BYTE到DWORD的转换
- 使用vtkImageReslice重新切片三维原始图像
- 特征:创建一个具有函数的三维阵列
- 扩充矩阵的行缩减-三维样条曲线计算
- 使用pcl transformcloud将三维点平移并旋转到原点
- 用C++从三维矢量中删除元素
- 如何访问CGAL三维三角测量中的面
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- std::将三维数组复制到三维向量中
- 显示结构的三维数组
- 如何将X 2维数组连接到一个三维阵列中
- 使用unique_ptr来管理三维数组
- 如何访问三维矩阵元素
- 无法访问三维数组中的特定位置
- OpenGL获取离当前鼠标位置最近的世界三维点的三维坐标
- 如何使用三维渲染缩放二维世界
- 取消将二维屏幕位置投影到三维世界空间
- 利用OpenCV从二维图像点计算三维世界点