3

几天以来,我一直在尝试为 android OpenGL ES 实现四元数旋转。我想通过 input 获得功能quaternion(x,y,z,w)。此功能将为GL10对象设置旋转。GL10 对象仅gl.glRotatef(y, 1.0f, 0.0f, 0.0f)具有提供欧拉角设置位置的功能。我尝试了该类https://github.com/TraxNet/ShadingZen/blob/master/library/src/main/java/org/traxnet/shadingzen/math/Quaternion.java来创建 Matrix 但它仍然不起作用。如果有人可以通过作为参数显示/编写如何设置 GL10 对象的位置,我将不胜感激quaternion(GL10setRotation(Quaternion q)).

4

1 回答 1

3

glRotatef只是当前矩阵与旋转矩阵的乘积(加上相关的边界检查)。

在 OpenGL 1 中执行此操作的一种方法(使用链接的四元数类)是:

Matrix rotation = new Matrix();
quaternion.toMatrix(rotation);
glMultMatrixf(rotation.getAsArray(), 0);

请注意,glRotate并且glTranslate自己做矩阵数学和使用glLoadMatrix. 一般来说,如果性能很重要,我建议不要完全使用 OpenGL 1。

于 2013-04-15T13:10:42.070 回答