4

Haskell を使用して非常に単純な OpenGL アプリケーションを作成しており、現在いくつかのポリゴンを表示しています。私の主な機能は次のようになります。

main :: IO ()
main = do
    (pname, _) <- getArgsAndInitialize
    createWindow $ "Haskellisa"
    initialDisplayMode $= [RGBAMode, WithAlphaComponent]
    displayCallback $= display
    mainLoop

GLfloats私の「表示」関数は、いくつかの三角形を描画し、0.0 から 1.0 の間のRGBA 値をランダムに生成した Color4 を使用して色を設定します。すべてが機能しますが、透明度はなく、重なっているポリゴンは色をブレンドしません。

この関数を使用して三角形を描いています:

drawTri :: Tri Float -> Color4 GLfloat -> IO ()
drawTri ((x1,y1), (x2,y2), (x3,y3)) col = do
    renderPrimitive Triangles $ do
        color col
        vertex $ (Vertex3 (x1 :: GLfloat) (y1 :: GLfloat) 0)
        vertex $ (Vertex3 (x2 :: GLfloat) (y2 :: GLfloat) 0)
        vertex $ (Vertex3 (x3 :: GLfloat) (y3 :: GLfloat) 0)

ここで透明度が機能しないのはなぜですか?

4

2 に答える 2

5

[RGBAMode, WithAlphaComponent]ビット深度を設定するだけだと仮定しています

Haskell でどのように行われるかはわかりませんが、 and を呼び出す必要がglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);ありglEnable( GL_BLEND );ます。また、透明な面を後ろから前に描く必要があります。

詳細はこちら: http://www.opengl.org/wiki/Transparency_Sorting

于 2013-01-08T18:43:48.203 に答える
3

追加するだけです:

blend $= Enabled >>
blendFunc $= (SrcAlpha, OneMinusSrcAlpha) >>

あなたの表示機能に。

それは私のために働いた!:)

于 2014-01-13T20:49:10.373 に答える