![]() |
1
29
如果可以的话,可以通过鼠标指针计算眼睛的光线并将其与模型相交,从而在CPU上进行拾取。 如果这不是一个选项,我会去一些类型的ID渲染。为每个要拾取的对象指定一种唯一颜色,用这些颜色渲染对象,最后从鼠标指针下的帧缓冲区中读取颜色。 编辑: 如果问题是如何从鼠标坐标构造光线,则需要以下内容:投影矩阵 磷 以及摄像机变换 C . 如果鼠标指针的坐标是 (x,y) 视窗的大小是 (宽、高) 剪辑空间中沿光线的一个位置是:
(注意,我翻转了y轴,因为鼠标坐标的原点通常位于左上角) 以下也是正确的:
它给出:
我们现在有:
|
![]() |
2
23
这是观景台:
首先,您需要确定鼠标单击在近平面上的位置:
然后确定相机在世界空间中的位置,并绘制一条光线,从相机开始,穿过在近平面上找到的点。
摄像机在
最终伪码:
|
![]() |
3
1
很简单,这背后的理论总是一样的 1)将二维坐标的两倍取消投影到三维空间上。(每个api都有自己的函数,但如果需要,可以实现自己的函数)。一个在最小z,一个在最大z。 2)利用这两个值计算从最小z到最大z的向量。 3)用矢量和一个点计算从最小z到最大z的光线 4)现在你有一条射线,用它你可以做一个射线三角形/射线平面/射线某物的交点,得到你的结果… |
![]() |
4
1
我很少有directx的经验,但我确信它与opengl类似。你想要的是一个令人沮丧的电话。 假设您有一个有效的z缓冲区,您可以使用以下命令在鼠标位置查询z缓冲区的内容:
如果不想使用glu,还可以实现glunproject,也可以自己实现,它的功能相对简单,在 opengl.org |
![]() |
5
0
好吧,这个话题已经过时了,但它是我在这个话题上找到的最好的一个,它对我有点帮助,所以我将在这里为下面的人发帖;-) 这就是我不需要计算投影矩阵逆的方法:
这假设是透视投影,但问题从一开始就不会出现在正交投影上。 |
![]() |
6
0
我和普通的射线采摘也有同样的情况,但是出了点问题。我已经用正确的方法做了这项不受欢迎的手术,但它就是不起作用。我想,我犯了一些错误,但不知道在哪里。我的矩阵乘法,逆矩阵和向量的矩阵乘法都很好,我已经测试过了。 在我的代码中,我对wm lbuttondown做出了反应。因此lparam在一个双字中返回[y][x]坐标。我提取它们,然后转换为规范化空间,我已经检查过这个部分也可以正常工作。当我点击左下角时-我得到接近-1-1的值,其他3个角的值都很好。然后我使用linepoins.vtx数组进行调试,它甚至不接近实际。
|
![]() |
Jimmy Yang · 何时需要进行透视分割? 3 年前 |
![]() |
Max Mister · 使用鼠标事件计算相机的位置和旋转 7 年前 |
![]() |
Lane will · OpenGL选择区域 7 年前 |
![]() |
synchronizer · openGL 2D视差滚动纹理撕裂/接缝 7 年前 |
![]() |
Steven Venham · OpenGL单通道到多通道的可行性 7 年前 |
![]() |
Andrew Lundgren · 如何在OpenTK(迷你地图!) 7 年前 |
![]() |
Kevin Su · 无法在opengl中正确绘制我的汽车 7 年前 |
![]() |
user1832287 · 来自细分控制点的边上的瑕疵 7 年前 |