2010-04-09 67 views
2

比方說,我已經在openGL中實現了一個帶有陰影的粗糙模型查看器,該查看器呈現一系列塊,以便我看起來像這樣。如何防止沿着我的3D模型表面的鋸齒狀邊緣?

http://i.imgur.com/TsF7K.jpg

每當旋轉我的模型到一邊,它會導致沿任何表面具有陡峭視角的不希望的鋸齒效果。

http://i.imgur.com/Bgl9o.jpg

我敢肯定,這是由於多邊形偏移我用來防止模型和線框之間的Z-戰鬥,但是我無法找到在OpenGL因子/單元參數這防止了這種不需要的影響。

  1. glPolygonOffset爲防止出現這種情況,因素和單位的最佳值是多少?

  2. 會執行反鋸齒緩解問題嗎?性能微不足道/有意義的交易?

  3. 這可能是一個陰影問題?我應該嘗試沿着這條思路解決嗎?

+0

您使用的是什麼格式的z-buffer? – zebrabox 2010-04-10 11:36:45

回答

1

有機會,你得到的z戰鬥在陡峭的角度(即當所有點都具有非常相似的z值),因爲
1)你的Z緩衝分辨率是你一直過低即設置一個16位的z緩衝區 - 嘗試將分辨率更改爲32位
2)您的模型非常小,也就是說,您的所有點太靠近了。你可以嘗試擴大模型。

使用一個固定的偏移量會導致不一致的結果,因爲大多數z緩衝區方案偏向於提供更高的分辨率,您離近剪輯平面圖越近,即您需要一個更小的偏移量,您距離近剪輯平面越近。

Here's a gamedev article,討論的問題更深入

注意抗鋸齒和改變着色不可能多大幫助這裏(除非你做了一些時髦的定製像素着色器來調節Z值,但似乎矯枉過正對我來說,雖然我對像素/着色器的片段沒有專家,所以它可能是可行的)

3

,這並不像Z-戰鬥我..

如果您繪製的平面着色的對象,然後一些GL_LINES在它上面,那些線會產生這種效果,因爲它們不是反鋸齒的。

爲什麼不只在對象上應用網格紋理?這樣你就可以利用OpenGL的紋理過濾。您可以嘗試:

  • 對此紋理啓用MIN_和MAG_過濾。
  • 使用gluBuild2DMipmaps使用mipmap創建紋理。 (請參閱Generating Mipmaps
  • 啓用各向異性過濾? (請參見this page
相關問題