[英]Webgl: farthest plane visibility
好吧,我有一個非常簡單的示例:只是一個z坐標等於1的三角形(沒有視圖或投影矩陣)。 坐標為:
0.0, 0.6, 1.0
-0.5, -0.4, 1.0
0.5, -0.4, 1.0
這樣三角形就位於最遠的平面上。 DEPTH_TEST已禁用。 三角形可見,因為-1 <= z <=1。但是當我啟用DEPTH_TEST時:
gl.enable(gl.DEPTH_TEST);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
三角形不再可見。 當我將所有z坐標都更改為-1(因此它在最近的平面上)時,它再次變得可見。
那么,為什么在最遠的平面上看不到它呢? 1)是webgl錯誤2)是webgl / opengl功能嗎? 3)如果它是一項功能,為什么它會以這種方式工作?
glDepthFunc
的初始值為GL_LESS
,因此即使將glClearDepthf
設置為1.0,比較1.0 <1.0也會產生false,因此片段將被丟棄。
您可以嘗試設置glDepthFunc(GL_LEQUAL)
。
請注意,您還應該注意浮點問題。 比較完全相等總是有問題的。 即使您不變換對象空間坐標並在頂點着色器中傳遞它們,z值也將從NDC范圍[-1,1]變換為窗口空間范圍[0,1](或任何其他值)用glDepthRangef
設置)。 但是,對於-1和1輸入情況,這應該不成問題,因為中間結果應該可以精確表示而不會損失精度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.