2009-08-13 70 views
1

我正在創建一個簡單的opengl應用程序,它明顯包含一些3d對象和紋理。然而,我的問題是,每個紋理都會出現僞像。這些以沿着邊緣的三角形的形式出現。刪除OpenGL紋理構件

我注意到,只要我將視點移近貼圖就能完美呈現,它就會消失。因此我懷疑它有些事要做,無論是使用mipmapping還是z緩衝區。 請注意,所有的紋理座標都是從.3ds文件中加載的,並且所有的紋理座標都在0-1範圍內進行驗證。

這裏是我的問題的一個畫面:

Picture 1

紋理加載這樣的:當我使用的DirectX,近平面/遠平面的距離比編程

//Texture parameters 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

//Define the 2d texture 
glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, array); 

//Create 2d mipmaps 
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, array); 
+0

你可以請張貼網格的圖片嗎?發動機是覆蓋單個四邊形還是由多個三角形組成? – 2009-08-13 12:51:32

回答

3

在邊緣造成僞影。在我的情況下,如果近平面與「攝像機」相距1個單位,遠平面相距10000個單位,則比例爲1/10000,這就產生了問題。如果我將近平面設置爲10或100,則比例會變大。它解決了鋸齒邊緣問題。

我不知道它是否適用於OpenGL,但您可能想查看它。

+0

那就是Z-Buffer prceision。如果你已經使用了24位Z緩衝區,你會發現問題也消失了。適當地設置你的單位注意其重要的一課。即沒有一個物體的寬度爲0.01單位,最大拉伸距離爲10000單位;) – Goz 2009-08-13 20:19:47

+1

不錯,將近平面從0.1改爲10解決了問題! – 2009-08-13 23:27:18

+0

@Goz ...是的。 DirectX還處理了一些名爲w-buffer的東西。這一切都有關係。自從我上次使用DirectX以來,我一直記憶猶新的教訓:D - 保持高比例 - 而不是確切的細節。 – 2009-08-14 04:13:41