C ++ OpenGL - 获取对象的世界坐标(碰撞检测所需)

时间:2010-11-20 01:11:59

标签: java c++ opengl collision-detection

我是OpenGL的新手,但这是我的问题:

我正在写一个世界创造者(对于Lego Duplo Blocks),我在3dsmax中制作了我的块,然后将它们导出到.obj文件。然后我创建了一个解析器来解析文件。我基本上把所有东西放在glNewList中。然后对于每个legoblock我有一些参数(包含它们应该在te x和z轴上转换的值(y轴尚未))我用它来改变它们在列表被调用后的位置(块通过使用arrowkeys)。

现在,在创建新块时,我想创建某种形式的碰撞检测,这样当新块出现在已经由另一个块占据的位置时,该块会自动进入另一个块的顶部(因此将其翻译)在y轴上)。

有没有办法让你的某个物体的世界坐标?或者还有另一种更好的方法来做我想做的事情吗?

请帮帮我吧!

提前致谢!

2 个答案:

答案 0 :(得分:5)

OpenGL不知道你在说什么。它只看到独立的顶点和多边形。您需要使用模型中的数据自行完成这些计算。 OpenGL是关于可视化的。其他一切都需要由您的应用程序完成。

常见的方法是在应用程序中存储每个对象及其当前位置和旋转。然后 - 在你的绘制循环中 - 你只需迭代所有对象并独立翻译和旋转它们(通常在这里很有用:glPushMatrix()glPopMatrix())。

答案 1 :(得分:1)

这里重要的是:您需要独立于OpenGL定义您的数据模型。因此,所有这些块,它们的位置,旋转等都需要保存在您的存储器中并由您的CPU代码更新。

然后它变得简单:发送你的数据到OpenGL并让它呈现。不是反过来:你没有检索 GL中对象位置的信息。 OpenGL不是逻辑数据的存储位置。