【发布时间】:2015-03-14 18:23:16
【问题描述】:
我有一些来自传感器设备的数据,即加速度计 x、y、z 和四元数。使用此信息,我想在 Android OpenGL 视图中呈现“线条图像”。有人可以帮助我了解如何将加速度值转换为 OpenGL glTranslatef 和 glRotatef 函数可以使用的部分。
【问题讨论】:
标签: android opengl-es sensor-fusion
我有一些来自传感器设备的数据,即加速度计 x、y、z 和四元数。使用此信息,我想在 Android OpenGL 视图中呈现“线条图像”。有人可以帮助我了解如何将加速度值转换为 OpenGL glTranslatef 和 glRotatef 函数可以使用的部分。
【问题讨论】:
标签: android opengl-es sensor-fusion
您不应该使用已弃用的 gltranslate 或 glrotate。而是直接管理正确的转换矩阵。
可以通过以下方式将四元数转换为矩阵:(sourced from my previous code)
float[] quatToMat(quaternion q, float* result)
{
//based on algorithm on wikipedia
// http://en.wikipedia.org/wiki/Rotation_matrix#Quaternion
float w = q.scalar ();
float x = q.x();
float y = q.y();
float z = q.z();
float n = x*x + y*y + z*z + w*w;
float s = n == 0? 0 : 2 / n;
float wx = s * w * x, wy = s * w * y, wz = s * w * z;
float xx = s * x * x, xy = s * x * y, xz = s * x * z;
float yy = s * y * y, yz = s * y * z, zz = s * z * z;
return new float[]{ 1 - (yy + zz), xy + wz , xz - wy ,0,
xy - wz , 1 - (xx + zz), yz + wx ,0,
xz + wy , yz - wx , 1 - (xx + yy),0,
0 , 0 , 0 ,1 };
}
如果您仍想使用固定函数管道,请将其推送到 glMultMatrix。
【讨论】:
glTranslatef、glRotatef 等固定功能转换已消失。如果将其转换为任意矩阵,则可以将其直接传递给着色器(ES 2.0 需要)或在使用 ES 1.x 时调用glMultMatrixf (...)。您提到了 Android,所以我怀疑您使用的是 ES 1.x 或 2.0+。