如何使用四元数控制相机

时间:2012-12-14 00:25:25

标签: java android opengl-es libgdx

我正试图让我的3D场景中的球体围绕一个相机进行轨道运行。我决定走四元数的路线。我在理解从哪里开始时遇到了一些麻烦。我不知道如何正确设置它们以及如何将它应用到我的相机。在那之后,我不知道如何在屏幕上用虚拟操纵杆控制相机。我已经阅读了很多关于四元数的内容,但是大多数示例都没有举例说明如何在3D编程中使用它们。有什么想法吗?

1 个答案:

答案 0 :(得分: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();

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

编辑:您是否瞄准OpengGL ES 1.x或2.0?我可以根据您定位的版本为您指明如何处理该矩阵。您还可以查看ShadingZen repo以获取有关OpenGL 2.0(org.traxnet.ShadingZen.core.Camera类)的更多信息。

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