我正在尝试使用OpenGL在Haskell中的3D空间中渲染一些对象。但我无法弄清楚如何在Z维度中渲染形状。调整三角形点的值会导致无法渲染。 (我是否缺少设置深度缓冲区的glEnable
的等价物?)
这是代码(为简洁起见编辑):
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 :(得分:1)
这就是我设置窗口的方法。我正在使用GLUT进行设置。
main = do
(progName, _) <- getArgsAndInitialize
initialDisplayMode $= [DoubleBuffered, WithDepthBuffer]
createWindow progName
windowSize $= Size 640 480
<...code omitted...>
您可能会追踪的第三行是设置窗口WithDepthBuffer