2010-07-15 178 views
0

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

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

+0

如果两个对象都是3d,并且您在glu对象之后呈现星星,那么您可能忘记了enabele深度测试和zbuffer。 – SigTerm 2010-07-15 22:35:50

+0

深度测试已启用,但星号为2d。我想这会有所作为。我应该提到这一点。 – 2010-07-15 22:40:39

+0

@Jeff:用2D表示你是在没有视角的情况下渲染它的?换句话说,正交投影。或者你的意思是它只是一架飞机? 除此之外,您是否在渲染过程中翻译相机或对象? – jweyrich 2010-07-15 22:50:10

回答

0

这不是世界风的错误,这实际上是理想的行为。使用glVertex2f()与使用glVertex3f()和设置z = 0相同。因此,它只是在与观察者非常接近的平面上绘制恒星(也取决于您的投影)。

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

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

为了使任何更复杂的事情(如星球相交的球体),你需要使用矩阵把星星放在所需的位置。