首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android OpenGL中创建三维旋转效果?

如何在Android OpenGL中创建三维旋转效果?
EN

Stack Overflow用户
提问于 2011-11-29 02:38:46
回答 2查看 2K关注 0票数 1

我目前正在使用OpenGL-ES为Android开发3D模型查看器。我想创造一个旋转的效果,根据给出的手势。我知道如何进行单轴旋转,例如只在x轴、y轴或z轴上旋转。然而,我的问题是,我不知道如何将它们全部组合在一起,让我的应用程序知道我想要在哪个轴上旋转,这取决于触摸姿态。我想到的手势是:

  • 上下滑动x轴
  • 左/右滑动y轴
  • Z轴的圆弧运动

我该怎么做?

编辑:我发现3种类型的滑动可以使瞬间变得非常丑陋。所以我做的是移除z轴运动。在消除了这个条件后,我发现其他两个算法与相同的算法结合起来非常好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-06 18:12:45

听起来你想做的事情比你可能知道的要复杂得多。从数学上讲,有两种方法可以做到这一点。(1)使用四元数(2)使用基本线性代数(但如果不小心,则会导致万向节锁)。但既然你只是在旋转,那么这与你无关)。让我们走第二条路线,因为它比较容易..。你需要做的是通过手势工具接收开始点和结束点,当你有这两点时。计算它所做的行。当你有这条线的时候,你可以用高中数学很容易地找到与这条线垂直的向量。这应该是你旋转矩阵中的旋转轴:

代码语言:javascript
复制
    //Rotate around the axis based on the rotation matrix (rotation, x, y, z)
    gl.glRotatef(rot, 1.0f, 1.0f, 0.0f);

不需要Z旋转,因为你不能在Z平面上旋转一个2D平板。1.0f,1.0f是表示向量x,y的变量。(腐烂)应该作为两个点之间距离的大小。

我已经有一段时间没有这样做了,所以如果你需要更精确的话,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2011-12-02 20:57:08

http://developer.android.com/resources/articles/gestures.html有一些关于构建“手势库”的信息。不是我自己查出来的,但似乎符合你想要的

或者,尝试类似gestureworks.com的东西(同样,我自己也没有尝试过)

我使用一个进度条视图来放大和缩小。然后,我在GLSurfaceView上使用x中的移动来绕y轴旋转,在y中使用移动来绕x轴旋转。

手势的问题在于,当应用程序试图确定用户使用的手势时,响应并不是即时的。如果然后使用用户移动手指的距离来确定旋转/缩放的数量,那么就没有即时的反馈,因此用户需要时间来学习如何控制旋转/缩放量。我想如果你把每一个手势都按一定的数量旋转/放大,那就行了。

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

https://stackoverflow.com/questions/8305175

复制
相关文章

相似问题

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