0

我在 openGL 的屏幕上绘制了两个对象,一个是使用 GLU 对象的球体,一个是纹理映射星。无论 z 坐标如何,纹理映射的星似乎总是在前面绘制。这是正常的openGL行为吗?有没有办法防止这种情况?

注意:我在 worldwind 框架内工作,所以可能是其他原因导致了这种情况。但我只是想知道纹理映射对象出现在前面是否正常?我不这么认为,但我不确定...

4

1 回答 1

0

这不是 worldwind 中的错误,这实际上是所需的行为。使用 glVertex2f() 与使用 glVertex3f() 并设置 z = 0 相同。所以它只是在非常靠近观察者的平面上绘制星星(也取决于您的投影)。

要解决您的问题,您可以使用 glDepthMask(0) 禁用深度写入,然后绘制星形,调用 glDepthMask(1),然后绘制球体,它现在将位于星体的前面。

您还可以在星上使用 glDepthFunc(GL_GREATER) 或在球体上使用 glDisable(GL_DEPTH_TEST) 来快速达到相同的效果。

要使任何事情变得更复杂(例如星星与球体相交),您需要使用矩阵将星星放在所需的位置。

于 2012-02-13T11:13:06.490 回答