Здравствуйте, у меня такая проблема: я рисую 4 стороны кубика, и при любом повороте, поверх всех сторон рисуется не та сторона, которая по координатам впереди всех, а та, которая по коду рисовалась последней. вот код:
import Graphics.UI.GLUT as GLUT
import Data.Maybe
import Data.IORef
type F = GLfloat
main = do
getArgsAndInitialize
win <- createWindow "Main Window"
st <- newIORef (0,0)
displayCallback $= onDraw st
keyboardMouseCallback $= Just (onKey st)
mainLoop
onDraw st = do
clear [ColorBuffer,DepthBuffer]
loadIdentity
(x,y) <- readIORef st
rot x 1 0 0
rot y 0 1 0
scale (0.1 :: F) 0.1 0.1
kub
flush
onKey :: IORef (F,F) -> Key -> KeyState -> Modifiers -> Position -> IO ()
onKey v (SpecialKey k) Down _ _ = case k of
{
KeyLeft -> modifyIORef v (\(x,y) -> (x,y+1));
KeyRight-> modifyIORef v (\(x,y) -> (x,y-1));
KeyUp -> modifyIORef v (\(x,y) -> (x-1,y));
KeyDown -> modifyIORef v (\(x,y) -> (x+1,y));
_ -> return()
} >> postRedisplay Nothing
onKey _ _ _ _ _ = return()
kub = do
cl 1 1 1
preservingMatrix $ trn 0 0 (-1) >> sq
cl 1 0.5 0.5
preservingMatrix $ trn 0 0 1 >> sq
cl 0.5 0.5 1
preservingMatrix $ rot 90 0 1 0 >> trn 0 0 1 >> sq >> cl 0.5 0.5 0.5 >> trn 0 0 (-2) >> sq
cl,trn :: F -> F -> F -> IO()
cl r g b = color (Color3 r g b)
trn x y z = translate$ Vector3 x y z
rot :: F -> F -> F -> F -> IO()
rot a x y z = rotate a $ Vector3 x y z
sq = renderPrimitive Polygon$ mapM_ vertex [Vertex3 (-1 :: F) (-1) 0, Vertex3 (-1) 1 0, Vertex3 1 1 0, Vertex3 1 (-1) 0]