2012-05-21 3 views
1

Я пытаюсь получить рендеринг объектов в 3D пространстве в Haskell с OpenGL. Однако я не могу понять, как визуализировать фигуры в Z-размерности. Регулировка значений точек треугольника заставляет его не отображать. (Есть ли эквивалент glEnable, что я пропускаю, чтобы создать буфер глубины?)Как отрегулировать глубину рендеринга в OpenGL Haskell?

Вот код (отредактированный для краткости):

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', но ничего не сделал (w.r.t. Z-axis) для | Z | <= 1 и не отображался для | Z | > 1 Кроме этого, на матрицу (AFAIK) влияет только вызов функции loadIdentity – 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

Смежные вопросы