2013-01-07 15 views
5

Ich versuche, ein Quadrat mit Textur zu rendern. Es funktioniert, außer dass ich eine pixelierte Linie an der diagonalen Kante bekomme, wo sich zwei Dreiecke treffen.OpenGL Dreiecke unerwünschte Kante Grenze

Die Textur:

Texture used on the squares

Die Render Ergebnis von drei Quadraten ist jedes Quadrat aus zwei Dreiecken:

Render result

Die Linie zeigt nur auf diagonalen Linien auf. Nichts erscheint an den vertikalen oder horizontalen Kanten.

Code:

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

Initialisierung:

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

Laden der Textur:

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] 

das Quad Rendering:

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 

Ich habe versucht GL.Polygons und GL.Quads Rendering: dasselbe Ergebnis.

Sie gehen weg, wenn ich die mit -- A getaggte Linie kommentieren. Warum?

Antwort

8

Das Problem ist mit der Linie GL.polygonSmooth $= GL.Enabled. Es scheint alle Kanten des Polygons zu glätten, auch wenn eine andere Kante darüber liegt.

Das Entfernen dieser Linie funktioniert, sogar unter Beibehaltung der GL.blend $= GL.Enabled.

The Common Mistakes page at OpenGL wiki sagt:

[Polygon glatt] ist keine empfohlene Methode für das Anti-Aliasing. Verwenden Sie stattdessen Multisampling.

+0

Ye Götter, die gefürchtete Polygon Glättung! Ich habe schon vergessen, dass diese uralte Abscheulichkeit immer noch in R'lyeh lauert. Schöner Fang und viel Glück bei weiteren Reisen! (Gehen Sie voran und machen Sie den Schalter, um Objekte irgendwann zu puffern.) – Kos

+0

@Kos, ich lerne immer noch OpenGL, weiß nichts über "Pufferobjekte". Danke, dass du einen Tipp für Verbesserungen gegeben hast, ich werde jetzt anfangen, darüber zu suchen und zu lernen. :) –

Verwandte Themen