2013-01-08 3 views
4

하스켈을 사용하여 매우 간단한 OpenGL 응용 프로그램을 만들고 있습니다. 내 주요 기능은 다음과 같다 :하스켈 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) 

:

나는이 기능을 사용하여 삼각형을 그리기는 무엇입니까?

+0

깊이 버퍼 비교 란 무엇입니까? Z가 같은 픽셀을 거부하고 모두 같은 깊이에 있으면 겹치는 픽셀이 렌더링되지 않습니다. – JasonD

+0

'WithAlphaComponent'는'GL_BLEND'를 가능하게합니까? –

답변

5

[RGBAMode, WithAlphaComponent]을 가정하는 것은 단지 내가 그것을 하스켈에서 어떻게하는지 모르겠어요 비트 깊이

을 설정하는 것입니다,하지만 당신은 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_BLEND);를 호출해야합니다. 당신은 또한 투명한 얼굴을 앞쪽으로 그려야 할 것입니다. 이 여기에

더 :

+4

효과가있었습니다! Haskell 번역 : 'blend $ = Enabled '와'blendFunc $ = (SrcAlpha, OneMinusSrcAlpha)' –

+0

또한 왜 [RGBAMode, WithAlphaComponent]를 설정했는지 전혀 알지 못했다. 단지 추측이었다. 내가 원하는대로 작동합니다. –

+0

내가 도와 줄 수있어 다행 :) –

관련 문제