我在openGL的屏幕上绘制了两个对象,一个是使用GLU对象的球体,另一个是纹理贴图星。无论z坐标如何,纹理映射的星似乎总是在前面绘制。这是正常的openGL行为吗?有办法防止这种情况吗?
注意:我正在使用worldwind框架,因此可能会发生其他原因导致此问题。但我只是想知道纹理映射对象出现在前面是否正常?我不这么认为,但我不确定......
答案 0 :(得分:0)
这不是worldwind中的错误,这实际上是期望的行为。使用glVertex2f()与使用glVertex3f()和设置z = 0相同。因此,它只是在非常接近观察者的平面上绘制星形(也取决于您的投影)。
要解决您的问题,您可以使用glDepthMask(0)禁用深度写入,然后绘制星形,调用glDepthMask(1)然后绘制球体,现在它将位于恒星前面。
您还可以在星球上使用glDepthFunc(GL_GREATER)或在球体上使用glDisable(GL_DEPTH_TEST)来快速达到相同的效果。
为了使任何更复杂的事情(例如星球与球体相交),你需要使用矩阵将星星放在所需的位置。