2

我正在制作一个 Android 游戏应用程序,并使用 openGL 将 3D obj 模型加载到应用程序中。我想知道是否有人可以帮助我如何使这些对象具有交互性。我真正需要的只是让一个对象可点击,但是学习更多东西会很酷,比如在屏幕上拖动它等等。

谢谢你的帮助。

4

1 回答 1

1

你想要的就叫采摘。

这不是一件容易的事,取决于您想要做的事情,您有多种选择。

问题:您想根据 2D 坐标(鼠标/触摸位置)在 3D 空间中选择一个对象。由于 2D 鼠标坐标,您会错过一个坐标来确定 3D 空间中的确切点击位置​​。

一种可能的选择是:

  • 用特定颜色渲染您的对象(例如完全红色)
  • 之后将当前显示缓冲区保存到变量
  • 清除显示缓冲区并使用标准设置再次渲染模型(这是向用户显示的屏幕)
  • 确定点击/触摸位置 将其转换为显示区域上的坐标
  • 检查保存的显示缓冲区中此坐标处的颜色。如果这个位置的颜色是红色的,用户点击/触摸了一个对象

这种方法不是那么灵活,但与其他解决方案相比,实现非常简单。它是有限的,因为您只能检测使用过的是否点击/触摸了某个对象,但您无法确定对象上的确切位置。

另一种可能的选择是根据 2D 单击位置计算 3D 世界上的射线,然后确定 3D 空间中与该射线发生碰撞的所有对象。这称为光线拾取。您可以在此处找到有关光线拾取的 OpenGL 教程

如果您不使用固定功能管道(例如,您使用自定义着色器等),示例使用glRenderMode, glLoadName, etc.可能不是最佳选择。

另一种选择是根据点击位置、视口和投影矩阵自己进行数学计算并计算光线矢量。如果你想这样做,gluUnproject的文档可以帮助你。

于 2012-07-06T18:38:22.330 回答