我试图用iPhone/iPod加速来直接操作一个3D物体。
为此,我已经搜索了很多东西(欧拉角,四元数等等)。
我使用的是OpenSG,在这里我有一个3D环境,我想要操作一个特定的物体(只使用加速度计在所有可能的iPhone/iPod自由度上旋转)。
所以,我试着想出一个解决这个问题的方法,但是它仍然没有预期的结果,在一些角度上得到了一些奇怪的旋转。
有人能告诉我我做错了什么吗?或者,在不使用四元数的情况下,有更好的方法来做到这一点吗?
加速度变量是一个包含从iPhone/iPod中过滤的加速度计值的低通滤波器的Vec3f。
acceleration.normalize();
Vec3f reference = OSG::Vec3f(0, 0, 1);
OSG::Vec3f axis = acceleration.cross( reference );
angle = acos( acceleration.dot( reference ) );
OSG::Quaternion quat;
quat.setValueAsAxisRad(axis, angle);在这段代码之后,我使用四元数quat更新我的场景节点。
发布于 2010-07-12 20:38:30
布拉德·拉森( Brad )在撰写Moleculs应用程序时,发表了一篇精彩的文章,很好地描述了他最初的3d观看体验。
他的轮调方法如下:
GLfloat currentModelViewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(xRotation, currentModelViewMatrix[1], currentModelViewMatrix[5], currentModelViewMatrix[9]);
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(yRotation, currentModelViewMatrix[0], currentModelViewMatrix[4], currentModelViewMatrix[8]);但是不管这是否有帮助,我不能推荐这个博客文章足够的布拉德学到了一两课
编辑补充说,我可能误解了问题,但会保留在这里的帖子,因为它可能会帮助人们使用类似的关键字搜索。
https://stackoverflow.com/questions/3231235
复制相似问题