我正在使用Haskell创建一个非常简单的OpenGL应用程序,只是让一些多边形出现。我的主要功能如下:
main :: IO ()
main = do
(pname, _) <- getArgsAndInitialize
createWindow $ "Haskellisa"
initialDisplayMode $= [RGBAMode, WithAlphaComponent]
displayCallback $= display
mainLoop
我的'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)
为什么我的透明度不在这里?
答案 0 :(得分:5)
我假设[RGBAMode, WithAlphaComponent]
只是设置位深度
我不确定它是如何在Haskell中完成的,但您必须致电glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
和glEnable( GL_BLEND );
。您还必须将透明面画回到前面。
答案 1 :(得分:3)
只需添加:
blend $= Enabled >>
blendFunc $= (SrcAlpha, OneMinusSrcAlpha) >>
显示功能。
它对我有用! :)