1
我想在OpenGL中的Haskell中獲得一些在3D空間中渲染的對象。不過,我無法弄清楚如何在Z維中渲染形狀。調整三角形點的值會導致它不呈現。 (是否有glEnable
等效的,我很想念建立深度緩衝?)如何在Haskell的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
你改變任何轉換矩陣的第三行? – Nobody
我用'translate'嘗試了一些代碼,但是它沒有做任何事情(w.r.t. Z軸)| Z | <= 1,並沒有渲染| Z | > 1 除此之外,只有對'loadIdentity'的調用影響矩陣(AFAIK) – bfops
沒有任何修改,矩陣將是單位矩陣。因此,您在z軸上的視錐的範圍將介於0和-1之間(相機從座標原點沿着負z軸向下看)。 – Nobody