2010-06-24 101 views
1

我正在編寫一些Java OpenGL代碼(儘管原理在C++ openGL中是相同的)。我有一種情況,我想把某些物品放在其他物品上面。我可以通過禁用深度測試或通過將其設置爲GL_ALWAYS來實現這些功能,並且效果很好。問題是,頂部的物品的顏色似乎被它下面的物品弄髒。我不確定它是否是照明問題,或者它是一些混合問題,但我試圖顯示該項目的顏色而不受其周圍顏色的影響,而不考慮此項目的z位置(因爲深度測試設置爲始終)。有沒有我應該使用的照明設置或混合設置?OpenGL混合(Java)

感謝, 傑夫

+0

有兩個問題:你的意思是你希望最後繪製的東西始終顯示在特定的像素中,而不管之前繪製的是什麼,而不管深度如何;其次,你確定你沒有在任何地方使用透明度? – DJClayworth 2010-06-24 21:23:23

+0

@DJClayworth,我希望繪製的最後一個對象是在特定點上顯示的對象,正確的,沒有深度測試就能很好地工作。而且,是的,我沒有使用透明度。當我旋轉場景時,它看起來是正確的。真的,我認爲需要一個兩遍渲染,我渲染場景的底部,然後是一組沒有進行深度測試的對象,並在基礎場景上渲染整個結果。 – 2010-06-24 22:54:06

回答

1

我認爲在這種情況下,我會獨自離開深度設置,但調整基於繪製順序(對於要繪製的那些項目上的物體的Z值基於訂單而不是正常的深度)。

glBegin(GL_WHATEVER); 
    for (int i=0; i<num_objects; i++) 
     glVertex(object[i].x, object[i].y, i/-100.0f); 
glEnd(GL_WHATEVER); 
+0

謝謝。在這個應用程序中,我將一些東西添加到地球表面,用戶可以旋轉地球。如果z值被改變,那麼這些項目實際上不會在表面上。 – 2010-06-25 13:05:35