4

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

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

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

我正在使用此功能绘制三角形:

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 中完成的,但你必须调用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);and 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 回答