2013-04-25 59 views
0

我在WebGL(使用OpenGL着色器)中編程簡單的模型加載器。我在片段着色器中實現了phong着色。但是,當我加載比簡單的猴子/立方體更大的物體,並將相機從光源中移出時,網格看起來很奇怪(別名?)。他們中的一些甚至被照亮,儘管他們應該被隱藏(黑色)。光源另一側的網格看起來很奇怪

減輕一邊是OK: Lightened side is OK

另一邊則是錯誤的: Other side is wrong

我計算法線的每個頂點同樣的方式,所以法線應該是OK(當我打開相機對汽車的輕量化側,一切順利)。

非常感謝您的提示。

回答

2

這看起來像一個單面 vs 雙面照明問題給我。如果你的網格只包含一個單獨的「圖層」面,那麼這些將具有僅指向一個方向的法線。如果使用單面照明,那麼背面,即如果光在正常指向的一側,看起來會很奇怪。

有三種方式來克服這一:

  • 使用雙面照明
  • 與剔除背面繪製對象兩次,然後翻轉法線和剔除正面
  • 給網格厚度,所以有兩面(你應該啓用背面剔除然後)
+0

+1:首先讓我感到震驚的是「這是單面照明」。 – 2013-04-26 03:05:57

+0

感謝響應,我增加背面正常反轉到我的片段着色器是這樣的: '如果(gl_FrontFacing == FALSE)正常正常= * VEC3(-1.0,-1.0,-1.0);' 和它(這輛車的內部看起來更好),但黑色的網格/多邊形仍然是黑色的,並且「鋸齒狀的虛線」仍然可見。是否可以輕鬆實現(或僅啓用)OpenGL ES 2.0中的別名?它可能有幫助。 – lukyer 2013-04-26 11:49:21

0

我想我發現在我的Collada解析器中的錯誤,我不尊重導出的法線,但我calc使用新的。這導致不時發生倒置法線(例如,這輛車的這個門網)。無論如何,雙面渲染也必須實現。

謝謝。