Pertanyaan OpenGL segitiga perbatasan tepi yang tidak diinginkan


Saya mencoba membuat persegi dengan tekstur. Ini bekerja, kecuali saya mendapatkan garis pixelated di tepi diagonal di mana dua segitiga bertemu satu sama lain.

Teksturnya:

Texture used on the squares

Hasil render dari tiga kotak, setiap persegi terbuat dari dua segitiga:

Render result

Garis hanya muncul pada garis diagonal. Tidak ada yang muncul di tepi vertikal atau horizontal.

Kode:

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

Inisialisasi:

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

Memuat tekstur:

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 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

Saya sudah mencoba render GL.Polygons dan GL.Quads: hasil yang sama.

Mereka pergi ketika saya memberi komentar pada baris yang ditandai -- A. Mengapa?


5
2018-01-07 18:01


asal


Jawaban:


Masalahnya ada pada garis GL.polygonSmooth $= GL.Enabled. Tampaknya memuluskan semua sisi poligon, bahkan jika ada tepi lain di atasnya.

Menghapus baris ini berfungsi, bahkan mempertahankan GL.blend $= GL.Enabled.

Itu Halaman Kesalahan Umum di wiki OpenGL mengatakan:

[Poligon mulus] bukan metode yang direkomendasikan untuk anti-aliasing. Menggunakan   Multisampling sebagai gantinya.


8
2018-01-07 20:55