【问题标题】:OpenGL triangles unwanted edge borderOpenGL三角形不需要的边缘边框
【发布时间】:2013-01-07 18:01:36
【问题描述】:

我正在尝试用纹理渲染一个正方形。 它工作正常,除了我在两个三角形相交的对角线边缘得到一条像素化线。

纹理:

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

这条线只出现在对角线上。垂直或水平边缘不显示任何内容。

代码:

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

初始化:

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

加载纹理:

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

我尝试渲染 GL.PolygonsGL.Quads:结果相同。

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

【问题讨论】:

    标签: opengl haskell


    【解决方案1】:

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

    删除此行有效,即使保留GL.blend $= GL.Enabled

    Common Mistakes page at OpenGL wiki 说:

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

    【讨论】:

    • 天啊,可怕的多边形平滑!我已经忘记了,这个古老的可憎之物还潜伏在拉莱耶。不错的收获,祝您好运! (继续,并在某个时候切换到缓冲区对象。)
    • @Kos,我还在学习 OpenGL,对“缓冲区对象”一无所知。感谢您提供改进提示,我现在将开始搜索和学习。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多