我正在尝试在3D场景中进行“拾取”,其中旋转视图以使iPhone以横向模式保持。我正在使用OpenGL ES 2.0(因此所有着色器,没有固定功能管道)。
我正在渲染代码中执行非项目并立即使用GL_LINES绘制生成的光线(仅在我第一次触摸屏幕时计算光线,所以之后我可以移动相机以观察从各种角度)。
我的非项目代码/调用很好(很多关于gluUnproject在线的例子)。我的矩阵反转代码很好(甚至与几个矩阵的excel相比)。然而,由此产生的光线偏离了我实际“点击”的位置至少5-15度(在模拟器中它实际上是一个点击,所以我期望从非项目中获得更多的精度)。
我的视图旋转到横向(在我创建透视投影矩阵后,我将它围绕Z旋转-90度;纵横比保持为纵向)。我相信数学的问题就在这里。
有没有人有使用横向视图进行选择/不投影的经验?
答案 0 :(得分:0)
您是否可以简单地关闭视野?假设你已经遇到了很多类似于传统管道的东西,如果你反转你的模型视图矩阵然后使用通用的非项目代码(即假设两个方向都有90度视野填充眼睛空间的代码)那么这就解释了它
快速诊断测试是看不同触摸的距离。靠近投影中心的触摸应该更接近正确的答案。
在像iPhone这样的方形像素的屏幕上,纵横比只是水平场与垂直场的比例。因此,如果您想要对它不科学,请找到您正在使用的视野,比如f,并尝试将结果乘以90 / f或f / 90。如果这不起作用,请尝试在那里投入480/320或320/480因子。
更好的解决方案是遵循您的代码并弄清楚您的实际水平和垂直视野是什么。并将结果乘以90以上。