2013-07-09 113 views
-1

我有一個非常簡單的OpenGL(3.2)設置,沒有光照,透視投影和簡單的着色器程序(應用投影轉換並使用texture2D從紋理中讀取顏色)。OpenGL透視紋理閃爍

相機正在俯視負Z軸,並在紋理的x-y平面上繪製幾個牆壁和立柱(http://i43.tinypic.com/2ryszlz.png)。

現在我在x-y平面上移動攝像機,它看起來像這樣: http://i.imgur.com/VCrNcly.gif

我現在的問題是:如何處理壁紋理的閃爍?

由於攝像頭居中在牆壁上,視角在紋理上壓縮了屏幕的紋理,因此屏幕上的一個像素實際上是紋理上的幾個像素,但只有一個被選擇用於顯示。從我在着色器中訪問的信息中,我看不到如何執行插值所需顏色的操作。由於這看起來像幾乎每個3D應用程序都應該有的問題,所以解決方案可能非常簡單(我希望它?)。

+0

你的'#版本'指令在哪裏?爲什麼在GL 3.2代碼中使用不推薦使用的GLSL內置變量? imgur有什麼問題?你的紋理座標在哪裏? – genpfault

+0

我不認爲它的相關性是它的一個普遍問題。我對OpenGL和GLSL相當陌生,這幾乎只是從一些示例中複製出來的,似乎很實用。剛剛發佈它,表明我不在GLSL中執行任何奇特操作。 – VolrathMR

+0

各向異性過濾可以幫助*很多這種情況下,但在極端情況下,你只需要調整紋理。 – Grimmy

回答

1

我似乎無法理解圖像,但從您所描述的內容看,您似乎在尋找MIPMAPPING。請谷歌,它是一個非常簡單和非常普遍使用的概念。您可以通過在程序中添加一行或兩行來使用它。祝你好運。 我會更詳細,但我今天沒有時間。

+0

Mipmaps似乎減少了影響,但並不完全否定它。這可能是因爲生成的mipmap的質量(通過glGenerateMipmaps)?這應該手動完成嗎? – VolrathMR

+0

有幾種mipmapping技術,但最基本的方式(通過glGenerateMipmaps應用)也是最好的。你可以嘗試一些紋理過濾器,如gl_Linear在min和mag上,也許會有所幫助。除此之外,我不能想到的,畢竟它只是試圖畫出一個醜陋的三角形。最好的做法是採取看起來非常好的紋理。你確定你的mipmap正確嗎?請記住,您現在使用的紋理對於效果而言更容易出現,對於「正常」紋理,紋理會更少。 –

+0

看着你的移動gif我認爲你可能在傾斜的牆上有另一個問題,也許你有一些無限的紋理座標或者什麼,我不確定。 –