OpenGL三角形不需要的边缘边框

Thi*_*gri 5 opengl haskell

我正在尝试使用纹理渲染正方形.它正在工作,除了我在对角线边缘上得到一个像素化线,两个三角形相互相遇.

质地:

在正方形使用的纹理

三个正方形的渲染结果,每个正方形由两个三角形组成:

渲染结果

该线仅显示在对角线上.垂直或水平边缘没有任何东西出现.

码:

import qualified Graphics.Rendering.OpenGL as GL
import qualified Graphics.UI.GLFW          as GLFW
Run Code Online (Sandbox Code Playgroud)

初始化:

GL.lineSmooth    $= GL.Enabled
GL.polygonSmooth $= GL.Enabled
GL.blend         $= GL.Enabled -- A
GL.blendFunc     $= (GL.SrcAlpha, GL.OneMinusSrcAlpha)
GL.lineWidth     $= 1.5
Run Code Online (Sandbox Code Playgroud)

加载纹理:

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]
Run Code Online (Sandbox Code Playgroud)

渲染四边形:

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
Run Code Online (Sandbox Code Playgroud)

我试过渲染GL.PolygonsGL.Quads:相同的结果.

当我评论带有标记的行时,它们会消失-- A.为什么?

Thi*_*gri 8

问题在于线路GL.polygonSmooth $= GL.Enabled.它似乎平滑了多边形的所有边缘,即使它上面有另一条边.

删除此行有效,甚至维护GL.blend $= GL.Enabled.

OpenGL wiki上Common Mistakes页面说:

[多边形平滑]不是推荐的抗锯齿方法.请改用多重采样.