2013-07-12 44 views

回答

1
var near = 0; 
var far = 100; 
mat4.perspective(projectionMatrix, fov, aspect, near, far); 

您已指定近平面爲0.由於計算深度緩衝區值的方式會導致深度緩衝區完全無用。

您應該設置大於零的near。您設置近平面的距離越遠,深度緩衝區功能就越好。

因此,最佳設置就在場景中最接近的東西前面 - 在您的情況下,這將是eye矢量的長度減去茶壺邊界球的半徑。但對於簡單的程序,只需設置合理比例的數字(如0.1或1)就足夠了。

+0

非常感謝。感謝您的建議,問題得到了解決! 我不知道,深度緩衝區附近的削波效應。 – yomotsu

+0

凱文,爲什麼應該如此?我認爲近值和遠值都在Z軸上,所以負值應該沒問題(只要相機位置仍然較遠)。錯誤觀念? – virtualnobi

+1

@virtualnobi這些近值和遠值在Z軸上,是的,但是我們定義了*投影*矩陣,所以它是相對於攝像機位置的Z軸,並且不存在視圖變換。根據定義,Near = 0位於相機處,並且靠近<0位於相機後面*。接近<0的區域,如果沒有剪去,任何繪製的東西都會被倒置,因爲它已經過去了相機位置的無限近點,因此無限大的點。 –