2013-01-07 13 views
5

Sto provando a rendere un quadrato con trama. Funziona, eccetto che ottengo una linea pixelata sul bordo diagonale dove due triangoli si incontrano.Triangolo OpenGL bordo bordo indesiderato

La trama:

Texture used on the squares

Il risultato di tre quadrati rendering, ogni quadrato è costituito da due triangoli:

Render result

La linea mostrato soltanto in linee diagonali. Nulla appare sui bordi verticali o orizzontali.

Codice:

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

inizializzazione:

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

Caricamento la trama:

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] 

rendering il quad:

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 

Ho provato il rendering GL.Polygons e GL.Quads: stesso risultato.

Se ne vanno via quando commento la riga taggata con -- A. Perché?

risposta

8

Il problema riguarda la linea GL.polygonSmooth $= GL.Enabled. Sembra levigare tutti i bordi del poligono, anche se c'è un altro margine sopra di esso.

La rimozione di questa linea funziona, anche mantenendo il GL.blend $= GL.Enabled.

Il Common Mistakes page at OpenGL wiki dice:

[Poligono liscio] non è un metodo consigliato per l'anti-aliasing. Utilizzare invece il campionamento multicampionamento.

+0

Ye the, il temuto poligono che lisce! Ho già dimenticato che quest'antica abominazione si nasconde ancora in R'lyeh. Bella cattura e buona fortuna con ulteriori viaggi haskelly! (Vai avanti e fai il passaggio agli oggetti buffer a volte.) – Kos

+0

@Kos, sto ancora imparando OpenGL, non so nulla di "oggetti buffer". Grazie per avermi suggerito un miglioramento, inizierò a cercare e impararlo ora. :) –