2010-07-15 177 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)以快速達到相同的效果。

爲了使任何更復雜的事情(如星球相交的球體),你需要使用矩陣把星星放在所需的位置。