2013-01-07 190 views
5

我想渲染帶紋理的正方形。 它的工作,除了我在兩個三角形相遇的對角線邊緣上得到像素線。OpenGL三角形不需要的邊緣

紋理:

Texture used on the squares

渲染的三個正方形結果,每個方塊由兩個三角形的:

Render result

線僅會出現在對角線上。垂直或水平邊緣上不顯示任何內容。

代碼:

import qualified Graphics.Rendering.OpenGL as GL 
import qualified Graphics.UI.GLFW   as GLFW 

初始化:

GL.lineSmooth $= GL.Enabled 
GL.polygonSmooth $= GL.Enabled 
GL.blend   $= GL.Enabled -- A 
GL.blendFunc  $= (GL.SrcAlpha, GL.OneMinusSrcAlpha) 
GL.lineWidth  $= 1.5 

載入紋理:

GL.texture GL.Texture2D $= GL.Enabled 
(texName:_) <- GL.genObjectNames 1 
GL.textureBinding GL.Texture2D $= Just texName 
GL.textureFilter GL.Texture2D $= ((GL.Nearest, Nothing), GL.Nearest) 
_ <- GLFW.loadTexture2D "wall.tga" [GLFW.BuildMipMaps] 

渲染四:

GL.textureBinding GL.Texture2D $= Just texName 
GL.renderPrimitive GL.TriangleStrip $ do 
    GL.texCoord $ GL.TexCoord2 0 (1::GL.GLfloat) 
    GL.vertex $ vertex3 20 0 0 
    GL.texCoord $ GL.TexCoord2 0 (0::GL.GLfloat) 
    GL.vertex $ vertex3 20 20 0 
    GL.texCoord $ GL.TexCoord2 1 (1::GL.GLfloat) 
    GL.vertex $ vertex3 0 0 0 
    GL.texCoord $ GL.TexCoord2 1 (0::GL.GLfloat) 
    GL.vertex $ vertex3 0 20 0 
GL.textureBinding GL.Texture2D $= Nothing 

我嘗試過渲染GL.PolygonsGL.Quads:結果相同。

當我評論標記爲-- A的行時,它們會消失。爲什麼?

回答

8

問題出在線GL.polygonSmooth $= GL.Enabled。它似乎可以平滑多邊形的所有邊緣,即使在其上還有另一個邊緣。

刪除此行可行,甚至保留GL.blend $= GL.Enabled

Common Mistakes page at OpenGL wiki說:

[多邊形平滑]不是抗混疊一個推薦方法。改爲使用 多重採樣。

+0

你的神,可怕的多邊形平滑!我已經忘記了這種古老的憎惡仍然隱藏在賴利。好的趕上和進一步的海克力旅程祝你好運! (繼續,並切換到緩衝對象的某個時間。) – Kos

+0

@Kos,我仍然在學習OpenGL,不知道任何關於「緩衝區對象」。感謝您提供改進建議,我現在開始搜索並瞭解它。 :) –