如何使OpenGL交互?

时间:2012-07-06 17:52:49

标签: android opengl-es

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你想要的就是挑选。

这不是一件容易的事,取决于你想做什么,你有多种选择可以做到这一点。

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

一种可能的选择是:

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

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

另一种可能的选择是基于2D点击位置计算3D世界中的光线,然后确定3D空间中与此光线发生碰撞的所有对象。这称为光线拾取。 您可以找到一个用于光线拾取的OpenGl教程here

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

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