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
당신은 어떤 변환 행렬을 변경 했 창을 설정하는 세 번째 줄은? – Nobody
'translate '와 함께 몇 가지 코드를 시도했지만, | Z |에 대해서는 아무 것도하지 않았습니다 (w.r.t. Z 축). <= 1이고 | Z |에 대해 렌더링하지 않았습니다. > 1 그 외의 경우,'loadIdentity'에 대한 호출 만이 행렬 (AFAIK)에 영향을줍니다. – bfops
행렬을 수정하지 않으면 단위 행렬이됩니다. 따라서 z 축에서 보는 절두체의 범위는 0과 -1 사이에 있습니다 (카메라는 음의 z 축을 따라 좌표 원점에서 내려다 보입니다). – Nobody