如何在Android OpenGL中创建3D旋转效果?

时间:2011-11-29 02:38:46

标签: android opengl-es rotation touch 3d-modelling

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

  • 向上/向下滑动x轴
  • 向左/向右滑动y轴
  • 以z轴的圆周运动滑动

我该怎么做?

编辑:我发现3种类型的滑动可以让这一刻非常难看。因此,我所做的是删除z轴运动。删除该条件后,我发现其他2个与同一算法结合使用时非常好。

2 个答案:

答案 0 :(得分:2)

http://developer.android.com/resources/articles/gestures.html有关于构建“手势库”的一些信息。我自己没有检查过,但似乎适合你正在寻找的东西

或者,尝试gestureworks.com之类的东西(再次,我自己没试过)

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

手势的问题在于,当应用尝试确定用户使用的手势时,响应不是即时的。然后,如果您使用用户移动手指的距离来确定旋转/缩放的量,则没有即时反馈,因此用户需要时间来学习如何控制旋转/缩放量。我想如果你按每个手势的设定量旋转/缩放

,它会起作用

答案 1 :(得分:1)

听起来你想要做的事情比你可能知道的更加数学密集。有两种方法可以用数学方法完成此操作。 (1)使用四元数(2)使用基本线性代数(但如果你不小心会导致万向节锁定......但由于你只是旋转然后这不是你的问题)..让我们走第二条路线,因为它更容易..你需要做的是通过一个手势工具接收滑动的起点和终点,当你有这两点时......计算它所做的线。当你有那条线时,你可以通过高中数学很容易地找到该线的垂直向量。现在应该是旋转矩阵中的旋转轴:

    //Rotate around the axis based on the rotation matrix (rotation, x, y, z)
    gl.glRotatef(rot, 1.0f, 1.0f, 0.0f);

不需要Z旋转,因为您无法使用2D平板电脑在Z平面中旋转。 1.0f,1.0f是应该是表示向量的x,y的变量的值。 (腐烂)应该作为两点之间距离的大小。

我暂时没有这样做,所以如果你需要更高的精确度,请告诉我。