1

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

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

我怎样才能做到这一点?

编辑:我发现 3 种类型的滑动会使这一刻变得非常难看。因此,我所做的是移除 z 轴运动。删除该条件后,我发现其他两个与相同的算法一起工作得非常好。

4

2 回答 2

2

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

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

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

手势的问题在于响应不是即时的,因为应用程序试图确定用户使用的手势。如果您随后使用用户移动手指的距离来确定旋转/缩放量,则没有即时反馈,因此用户需要时间来学习如何控制旋转/缩放量。我想如果您在每个手势中旋转/缩放一定量,它会起作用

于 2011-12-02T20:57:08.493 回答
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 的变量的值。(rot) 应该作为两点之间距离的大小。

我有一段时间没有这样做了,所以如果您需要更高的精度,请告诉我。

于 2012-06-06T18:12:45.130 回答