Я пытаюсь получить рендеринг объектов в 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
ли вы изменить любую матрицу преобразований? – Nobody
Я пробовал код с 'translate', но ничего не сделал (w.r.t. Z-axis) для | Z | <= 1 и не отображался для | Z | > 1 Кроме этого, на матрицу (AFAIK) влияет только вызов функции loadIdentity – bfops
Без какой-либо модификации матрицы будут единичными. Таким образом, диапазон вашего усечения на оси z будет находиться между 0 и -1 (камера смотрит вниз от начала координат вдоль отрицательной оси z). – Nobody