【问题标题】:How to create 3D rotation effect in Android OpenGL?如何在 Android OpenGL 中创建 3D 旋转效果?
【发布时间】:2012-06-07 02:12:45
【问题描述】:

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

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

我该怎么做?

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

【问题讨论】:

  • 我没有在 Android 中编程,但这对我来说似乎很容易。检测向上或向下滑动(如果 Android 有手势识别器,使用它;否则,检测第一次触摸,然后向上触摸,并从中获取方向)然后根据距离在您想要的任何轴上应用旋转量/滑动速度。您将不得不为圆形手势做更多的工作,但您可能会在 SO 上找到一些东西。
  • 是的,我知道的就这么多。我确实说过我知道如何处理单轴滑动。我的问题是如何识别单个类型的触摸动作,例如同一处理程序中的直线滑动和弯曲滑动。一旦我弄清楚了相应的路径,滑动的方向就很容易了。

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


【解决方案1】:

http://developer.android.com/resources/articles/gestures.html 有一些关于构建“手势库”的信息。自己没有检查过,但似乎符合您的要求

或者,尝试gestureworks.com 之类的方法(同样,我自己没有尝试过)

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

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

【讨论】:

    【解决方案2】:

    听起来您想要做的事情比您可能知道的更多数学密集型。有两种方法可以在数学上做到这一点。 (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) 应该作为两点之间距离的大小。

    我已经有一段时间没有这样做了,如果您需要更精确的信息,请告诉我。

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多