2010-03-26 75 views
4

我一直在使用OpenGL(JOGL)中的深度緩衝區來確保通過禁用深度緩衝區來呈現某些項目(詳見我的上一個問題Java OpenGL saving depth buffer) 。深度測試禁用時,Java OpenGL顏色材質變暗

這是有效的,除了當我設置深度測試禁用時正在繪製的項目的顏色,沒有任何材質發亮。該項目呈現爲原始顏色的較暗版本(看起來好像沒有真正應用它的照明效果)。這是會有什麼原因嗎?以及我如何防止這種情況?

感謝, 傑夫

回答

2

既然你沒有得到迴應,到目前爲止,我會盡力給它我的鏡頭,雖然我真的有點這裏猜測。

幾個原因,我能想象,爲什麼你看到的效果會發生:

  • 與此相反的環境和光照模型的漫反射組件,鏡面組件需要考慮的眼睛位置相對於物體和光源。因此,當OpenGL使用深度緩衝區時,這可能會更快。我假設,這樣 - 對於要繪製的每個像素 - 它可以使用深度值來完成z分量的眼睛座標。

  • 也許它也與光衰有關?當使用光線衰減時,OpenGL會計算光線在到達眼睛之前必須經過的距離(還是僅通過計算光線與物體之間的距離來簡化?我不確定。)

所以我認爲,如果沒有深度緩衝區,無法正確使用照明。我想你在另一篇文章中提到,你不能只清除深度緩衝區,因爲它會干擾應用程序的其餘部分?我認爲應該有模板解決方案,類似於http://www.glprogramming.com/red/chapter10.html中的「例子10-1:使用模板測試」(它用C編寫,但我希望它在JOGL中類似)。模板只會阻止剩餘的應用程序繪製寶貴的像素。

+0

謝謝,克里斯。我想你是正確的。我能夠通過實際禁用所有未選項目上的深度遮罩並將其渲染爲最後一個來解決此問題。這確保了他們最終成爲頂級。雖然我認爲使用模板是一個更好的解決方案。謝謝。 – 2010-03-26 17:23:04