簡體   English   中英

Webgl:最遠的飛機能見度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM