Haskell OpenGL:透明度不起作用

Sam*_*ern 4 opengl transparency haskell rgba

我正在用Haskell制作一个非常简单的OpenGL应用程序,只是让一些多边形出现.我的主要功能如下:

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

我的'display'函数绘制一些三角形并使用Color4设置颜色,Color4随机生成的RGBA值GLfloats介于0.0和1.0之间.一切正常但没有透明度,重叠的多边形不会混合它们的颜色.

我正在使用此函数绘制三角形:

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

为什么我的透明度不在这里?

Luk*_* B. 5

我假设[RGBAMode, WithAlphaComponent]只是设置位深度

我不知道它是如何在Haskell做,但你必须调用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable( GL_BLEND );.您还必须将透明面画回到前面.

更多相关内容:http://www.opengl.org/wiki/Transparency_Sorting

  • 有效!Haskell翻译:`blend $ = Enabled'和`blendFunc $ =(SrcAlpha,OneMinusSrcAlpha)` (4认同)