【发布时间】:2013-12-15 20:06:53
【问题描述】:
我已经找到了解决这个问题的方法,但似乎没有一个有效。
我正在使用 JBullet 库并检索对象方向,它以四元数的形式给出。我将如何从这个四元数中检索欧拉值以便我可以调用..?
glRotate(rotationX, 1, 0, 0);
glRotate(rotationY, 0, 1, 0);
glRotate(rotationZ, 0, 0, 1);
或者也许有更有效的方法?
编辑:
我试过 quat -> vec
public static Vector3f quatToVec(Quat4f q) {
float x = q.x;
float y = q.y;
float z = q.z;
float w = q.w;
float roll = (float) (Math.atan2(2*y*w - 2*x*z, 1 - 2*y*y - 2*z*z) / Math.PI * 360);
float pitch = (float) (Math.atan2(2*x*w - 2*y*z, 1 - 2*x*x - 2*z*z) / Math.PI * 360);
float yaw = (float) (Math.asin(2*x*y + 2*z*w) / Math.PI * 720);
return new Vector3f(yaw, pitch, roll);
}
我试过quat -> 旋转矩阵
public static FloatBuffer quatToMatrix(Quat4f q) {
float qx = q.x;
float qy = q.y;
float qz = q.z;
float qw = q.w;
FloatBuffer fb = BufferUtils.createFloatBuffer(16);
fb.put(new float[]{1.0f - 2.0f*qy*qy - 2.0f*qz*qz, 2.0f*qx*qy - 2.0f*qz*qw, 2.0f*qx*qz + 2.0f*qy*qw, 0.0f,
2.0f*qx*qy + 2.0f*qz*qw, 1.0f - 2.0f*qx*qx - 2.0f*qz*qz, 2.0f*qy*qz - 2.0f*qx*qw, 0.0f,
2.0f*qx*qz - 2.0f*qy*qw, 2.0f*qy*qz + 2.0f*qx*qw, 1.0f - 2.0f*qx*qx - 2.0f*qy*qy, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f});
fb.flip();
return fb;
}
但似乎都不起作用
【问题讨论】:
-
你尝试了什么?什么不起作用? ...因为我们不是来做你的工作/研究的!
-
@Vallentin 好的 :)
标签: java opengl graphics 3d lwjgl