1

我正在尝试在 3D 场景中进行“挑选”工作,其中视图被旋转以使 iPhone 处于横向模式。我正在使用 OpenGL ES 2.0(所以所有着色器,没有固定功能管道)。

我正在从渲染代码中执行 unproject 并立即使用 GL_LINES 绘制生成的光线(光线仅在我第一次触摸屏幕时被计算,所以之后我可以移动相机以从各个角度观察生成的线) .

我的 unproject 代码/调用很好(网上有很多 gluUnproject 的例子)。我的矩阵求逆代码很好(即使与一些矩阵的 excel 相比)。但是,生成的光线与我实际“点击”的位置至少偏离 5-15 度(在模拟器中它确实是一次点击,所以我期望 unproject 的精度更高)。

我的视图被旋转为横向(在创建透视投影矩阵后,我将它围绕 Z 旋转 -90 度;纵横比保持在纵向)。我相信数学关闭的问题就在这里。

有没有人有专门针对景观视图进行拾取/非投影的经验?

4

1 回答 1

0

是否有可能您只是关闭了视野?假设你已经坚持了很像传统管道的东西,如果你反转你的模型视图矩阵然后使用通用的 unproject 代码(即,假设在两个方向上都有 90 度视野以填充眼睛空间的代码)那么这就可以解释它。

快速诊断测试是查看不同触摸的距离。靠近投影中心的触摸应该更接近正确答案。

在像 iPhone 这样的方形像素屏幕上,纵横比只是水平场与垂直场的比例。因此,如果您想对此不科学,请找到您正在使用的视野,例如 f,然后尝试将结果乘以 90/f 或 f/90。如果这不起作用,请尝试在其中添加 480/320 或 320/480 的系数。

更好的解决方案是遵循您的代码并弄清楚您的实际水平和垂直视野是什么。并将您的结果乘以 90 以上。

于 2011-03-14T22:41:38.690 回答