2

我知道这样做的四元数方法。但最终这些方法需要我们将所有有问题的对象转换到相机的旋转“空间”中。

但是,看看数学,我确信必须有一种简单的方法来获得仅基于相机的 YAW(航向)和 PITCH 的直线的 XY、YZ 和 XZ 方程。

例如,给定视锥体的法线,例如 (sqrt(2), sqrt(2), 0),您可以轻松地为 XY 平面构造线 (x+y=0)。但是一旦 Z(在这种情况下,Z 用于深度,而不是 GL 的 Y 坐标加扰)发生变化,计算就会变得更加复杂。

此外,给定应用旋转的顺序:偏航、俯仰、滚动;滚动根本不会影响视锥体的法线。

所以我的问题很简单。如何从 3 坐标视图法线(即归一化,即矢量长度为 1)或偏航(以弧度表示)、俯仰(以弧度表示)对到一组映射方向的三线方程穿越太空的“眼睛”?

笔记:

四元数我在这方面取得了成功,但是对于模拟中的每个实体来说,数学太复杂了,无法进行视觉检查,并且必须检查所有可见对象,即使进行各种检查以减少可见对象的数量也是如此。

4

2 回答 2

2

使用任何流行的方法从偏航和俯仰构造矩阵来表示相机旋转。矩阵元素现在包含各种有用的信息。例如(当使用通常的表示时)第三列的前三个元素将指向视图向量(进入或离开相机,取决于您使用的约定)。第二列的前三个元素将相对于相机指向“向上”。等等。

但是,很难自信地回答你的问题,因为你说的很多事情对我来说没有意义。例如,我不知道“一组通过空间映射'眼睛'方向的三线方程”是什么意思。如上所述,眼睛方向由矢量简单地给出。

于 2012-04-27T19:12:17.043 回答
1
 nx = (float)(-Math.cos(yawpos)*Math.cos(pitchpos));
 ny = (float)(Math.sin(yawpos)*Math.cos(pitchpos));
 nz = (float)(-Math.sin(pitchpos)));

这得到了相机的法线。这假设偏航和俯仰以弧度为单位。

如果你有相机的位置(px,py,pz),你可以得到参数方程:

x = px + nx*t
y = py + ny*t
z = pz + nz*t

您还可以构建这条线的 2d 投影:

0 = ny(x-px) + nx(y-py)
0 = nz(y-px) + ny(z-pz)
0 = nx(z-pz) + nz(x-px)

我认为这是正确的。如果有人注意到不正确的加号/减号,请告诉我。

于 2012-05-03T15:41:52.333 回答