2013-01-07 18 views
5

Doku ile bir kare oluşturmaya çalışıyorum. Çalışıyor, iki üçgenin birbiriyle buluştuğu köşegen çizgide piksellenmiş bir çizgi alıyorum.OpenGL üçgenleri istenmeyen kenar sınırı

doku:

Texture used on the squares

üç kare sonucunu işlemek, her kare iki üçgen oluşmaktadır:

Render result

hat sadece çapraz çizgiler üzerinde gösterir. Dikey veya yatay kenarlarda hiçbir şey görünmez.

Kodu:

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

Başlatma:

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 
: quad Rendering

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.lineSmooth $= GL.Enabled 
GL.polygonSmooth $= GL.Enabled 
GL.blend   $= GL.Enabled -- A 
GL.blendFunc  $= (GL.SrcAlpha, GL.OneMinusSrcAlpha) 
GL.lineWidth  $= 1.5 

dokusunu yükleniyor

GL.Polygons ve GL.Quads görüntülemelerini denedim: aynı sonuç.

-- A ile etiketlenmiş satırı yorum yaptığımda giderler. Niye ya?

cevap

8

Sorun, GL.polygonSmooth $= GL.Enabled numaralı hattır. Üzerinde bir başka kenar olsa bile poligonun tüm kenarlarını düzleştiriyor gibi görünüyor.

Bu satırın kaldırılması, GL.blend $= GL.Enabled'un bakımını bile sürdürmektedir.

Common Mistakes page at OpenGL wiki

söyler:

[Çokgen düz] değildir, anti-aliasing için önerilen bir yöntem. Bunun yerine Multisampling kullanın.

+0

Ye tanrılar, çokgen yumuşatma! Zaten bu antik iğrençliğin R'lyeh'de hala olduğunu unuttum. Daha iyi haskelly yolculukları ile güzel yakalamak ve iyi şanslar! (Devam edin ve bir ara nesnelere geçiş yapmasını sağlayın.) – Kos

+0

@Kos, Ben hala OpenGL öğreniyorum, "arabellek nesneleri" hakkında bir şey bilmiyorum. İyileştirme için bir ipucu verdiğiniz için teşekkürler, şimdi araştırmaya ve öğrenmeye başlayacağım. :) –