2013-01-07 12 views
5

Próbuję wyrenderować kwadrat z teksturą. Działa, oprócz tego, że dostaję piksele na przekątnej, gdzie spotykają się dwa trójkąty.OpenGL wykreśla niepotrzebne krawędzie krawędzi

Tekstura:

Texture used on the squares

Masę tynkarską wynikiem trzech kwadratów, każdy kwadrat składa się z dwóch trójkątów:

Render result

Linia pokazuje tylko na ukośne linie. Nic nie pojawia się na pionowych lub poziomych krawędziach.

Kod:

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

Inicjalizacja:

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

Ładowanie Tekstura:

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] 

Renderowanie 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 

Próbowałem renderowania GL.Polygons i GL.Quads: ten sam wynik.

Odchodzą, gdy skomentuję wiersz oznaczony -- A. Czemu?

Odpowiedz

8

Problem dotyczy linii GL.polygonSmooth $= GL.Enabled. Wydaje się, że wygładza wszystkie krawędzie wielokąta, nawet jeśli jest nad nim inna krawędź.

Usunięcie tej linii działa, nawet zachowując GL.blend $= GL.Enabled.

The Common Mistakes page at OpenGL wiki mówi:

[wielokąt gładka] nie jest zalecana metoda wygładzania. Zamiast tego użyj funkcji Multisampling.

+0

Ye bóg, straszny wielobok wygładzający! Zapomniałem już, że ta starożytna obrzydliwość wciąż czai się w R'lyeh. Fajny połów i powodzenia w dalszych podróżach po okolicy! (Śmiało idź i przestaw przełącznik na obiekty buforowe.) – Kos

+0

@Kos, Nadal uczę się OpenGL, nie wiem nic o "obiektach buforowych". Dziękuję, że dałeś wskazówkę do ulepszenia, zacznę szukać i uczyć się o tym teraz. :) –

Powiązane problemy