2013-04-15 133 views
2

由于几天我试图实现Android OpenGL ES的四元数旋转。我想获得输入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来创建矩阵,但它仍然不起作用。我将不胜感激,如果有人可以显示/写如何通过将作为参数来设置GL10对象的位置quaternion(GL10setRotation(Quaternion q)).四元数对象旋转

回答

2

glRotatef仅仅是一个旋转矩阵(加上相关的边界检查)当前矩阵相乘。在OpenGL 1做到这一点(使用链接的四元数类)

一种方法是:

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

请注意,glRotateglTranslateslower than doing the Matrix math yourself和使用glLoadMatrix。一般来说,如果性能很重要,我建议不要完全使用OpenGL 1。

+0

你是对的。无论如何,如果使用OpenGL的固定API是必须的,我会做所有我使用四元数的旋转和作为最后一步加载矩阵,如你所提到的与glLoadMatrix。 – Trax