2013-01-07 16 views
5

私はテクスチャで四角形をレンダリングしようとしています。 2つの三角形がお互いに出会う斜めの端にピクセル化された線が表示されている点を除いて、動作しています。OpenGLの三角形が不要なエッジボーダー

テクスチャ:

Texture used on the squares

3つの正方形のレンダリング結果は、各正方形は、二つの三角形で構成されている:

Render result

線だけ対角線上に示しています。垂直または水平のエッジには何も表示されません。

コード:

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

初期化:

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

テクスチャをロード

レンダリングしようとしましたGL.PolygonsGL.Quads:同じ結果です。

私が-- Aというタグが付けられた行にコメントすると、それらは消えます。どうして?

答えて

8

問題は、行GL.polygonSmooth $= GL.Enabledです。その上に別のエッジがあっても、ポリゴンのすべてのエッジを滑らかにするようです。

この行を削除すると、GL.blend $= GL.Enabledを保持していても機能します。

Common Mistakes page at OpenGL wikiは言う:

[多角形がスムーズ]アンチエイリアシングのための推奨方法ではありません。代わりに マルチサンプリングを使用してください。

+0

イエス神、恐ろしいポリゴンスムージング!私はすでに、この古代の憎悪はまだR'lyehに潜んでいることを忘れていました。ニースのキャッチと幸運をさらにhaskelly旅で! (先に進んで、いつかオブジェクトをバッファリングするようにしてください) – Kos

+0

@Kos、私はまだOpenGLを学んでいますが、 "バッファオブジェクト"について何も知らないです。改善のためのヒントをいただきありがとうございます、私は今、それについての調査と学習を始めます。 :) –

関連する問題