2012-05-21 5 views
1

OpenGL을 사용하여 Haskell의 3D 공간에서 렌더링하는 일부 객체를 얻으려고합니다. 하지만 Z- 차원에서 모양을 렌더링하는 방법을 알아낼 수는 없습니다. 삼각형의 점에 대한 값을 조정하면 렌더링되지 않습니다. (필자는 깊이 버퍼를 설정 누락 glEnable에 대한 동등한이 있습니까?) 여기 하스켈의 OpenGL에서 렌더링 깊이를 조정하는 방법은 무엇입니까?

이 (지면 관계 상 편집 됨)입니다 코드입니다 : 이것은 창을 설정하는 일입니다

initGL :: IO() 
initGL = do 
      shadeModel $= Smooth 
      clearDepth $= 1 
      depthFunc $= Just Lequal 
      hint PerspectiveCorrection $= Nicest 

drawFrame :: WindowRefreshCallback 
drawFrame = do 
       clear [ ColorBuffer, DepthBuffer ] 
       loadIdentity 

       renderPrimitive Triangles $ foldl1' (>>) $ map vertex 
        [ Vertex3 0  1 0 -- top 
        , Vertex3 1 (-1) 0 -- bottom right 
        , Vertex3 (-1) (-1) (0 :: GLdouble) -- bottom left 
        ] 

       flush 

main :: IO() 
main = do 
      True <- initialize 
      True <- openWindow (Size 800 600) [] Window 

      ... -- Set window title, set up callbacks 

      initGL 
      clearColor $= toGLColor (Color4 0 175 200 0) 

      doWhile (not <$> readIORef isClosed) $ drawFrame >> swapBuffers 
+0

당신은 어떤 변환 행렬을 변경 했 창을 설정하는 세 번째 줄은? – Nobody

+0

'translate '와 함께 몇 가지 코드를 시도했지만, | Z |에 대해서는 아무 것도하지 않았습니다 (w.r.t. Z 축). <= 1이고 | Z |에 대해 렌더링하지 않았습니다. > 1 그 외의 경우,'loadIdentity'에 대한 호출 만이 행렬 (AFAIK)에 영향을줍니다. – bfops

+3

행렬을 수정하지 않으면 단위 행렬이됩니다. 따라서 z 축에서 보는 절두체의 범위는 0과 -1 사이에 있습니다 (카메라는 음의 z 축을 따라 좌표 원점에서 내려다 보입니다). – Nobody

답변

1

. 내가 GLUT를 사용하여 일을 설정하고 있습니다.

main = do 
    (progName, _) <- getArgsAndInitialize 
    initialDisplayMode $= [DoubleBuffered, WithDepthBuffer] 
    createWindow progName 
    windowSize $= Size 640 480 
    <...code omitted...> 

당신이 가능하게 한 후있어 선은 WithDepthBuffer

관련 문제