首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用iPhone/iPod加速旋转三维物体

使用iPhone/iPod加速旋转三维物体
EN

Stack Overflow用户
提问于 2010-07-12 18:43:46
回答 2查看 834关注 0票数 0

我试图用iPhone/iPod加速来直接操作一个3D物体。

为此,我已经搜索了很多东西(欧拉角,四元数等等)。

我使用的是OpenSG,在这里我有一个3D环境,我想要操作一个特定的物体(只使用加速度计在所有可能的iPhone/iPod自由度上旋转)。

所以,我试着想出一个解决这个问题的方法,但是它仍然没有预期的结果,在一些角度上得到了一些奇怪的旋转。

有人能告诉我我做错了什么吗?或者,在不使用四元数的情况下,有更好的方法来做到这一点吗?

加速度变量是一个包含从iPhone/iPod中过滤的加速度计值的低通滤波器的Vec3f。

代码语言:javascript
运行
复制
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更新我的场景节点。

EN

回答 2

Stack Overflow用户

发布于 2011-11-07 15:36:05

我也想做同样的事情,只是尝试了一下,我以前没有用过加速度计,这似乎是可能的。

问题是,如果你把你的iPhone放在一个桌子上,然后慢慢地旋转它,观察加速度计的输出,它基本上不会改变(一个重力下降)。如果你把它向上/向下倾斜在任何四个边上,你就会看到输出的变化。

换句话说,你知道你的桌面是倾斜的上/下或左/右,但你不知道你在旋转它。所以你可以把这个倾斜映射成一个三维物体的两个旋转。

你可能会使用指南针水平旋转,我不能尝试,因为我是原型在统一游戏引擎,它似乎还不支持指南针。

票数 3
EN

Stack Overflow用户

发布于 2010-07-12 20:38:30

布拉德·拉森( Brad )在撰写Moleculs应用程序时,发表了一篇精彩的文章,很好地描述了他最初的3d观看体验。

他的轮调方法如下:

代码语言:javascript
运行
复制
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]);

但是不管这是否有帮助,我不能推荐这个博客文章足够的布拉德学到了一两课

编辑补充说,我可能误解了问题,但会保留在这里的帖子,因为它可能会帮助人们使用类似的关键字搜索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3231235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档