2

我正在尝试允许相机在我的 3D 场景中围绕球体运行。我决定走四元数的路线。不过,我在理解从哪里开始时遇到了一些麻烦。我不知道如何正确设置它们以及如何将其应用于我的相机。在那之后,我不知道如何使用屏幕上的虚拟操纵杆来控制相机。我读过很多关于四元数的文章,但大多数例子都没有给出如何在 3D 编程中使用它们的例子。有任何想法吗?

4

1 回答 1

1

试图给你一个快速的答案,你最后需要将四元数转换为矩阵,以便你可以将它与 OpenGL ES 一起使用。使用四元数来存储您的旋转,将它们链接起来,当您准备好渲染场景时,从四元数(作为矩阵)中获取“编码”旋转并将其作为视图矩阵传递给您的管道。

检查此源代码以获取 android-ready 的快速四元数类(为方便起见,它有一个 toMatrix 方法):

https://github.com/TraxNet/ShadingZen/blob/master/library/src/main/java/org/traxnet/shadingzen/math/Quaternion.java

一个例子:

Quaternion camera_quat = new Quanternion(); // This creates an identity quaternion
camera_quat.setRotation(new Vector3(0.f, 1.f, 0.f), PI/2); // generate a 90 degrees    rotation around the given vector

float [] matrix = camera_quat.toMatrix().getAsArray();

此时您有一个旋转矩阵,您可以将其用作您的视图矩阵。

编辑:你的目标是 OpenGL ES 1.x 还是 2.0?我可以根据您的目标版本为您提供有关如何处理该矩阵的指导。您还可以查看 ShadingZen 存储库以获取有关 OpenGL 2.0(org.traxnet.ShadingZen.core.Camera 类)的更多信息。

EDIT2:四元数的一大优点是您可以轻松地绕任意轴旋转。我上面的代码围绕(0,1,0)旋转。您可以利用这个想法:定义两个四元数,一个用于一个操纵杆轴,另一个用于另一个轴。将两个四元数相乘,你就有了两个旋转。转换为矩阵和中提琴!希望有帮助。

于 2012-12-14T09:45:23.730 回答