{- Ras3d.hs Ras for RASterize. This module will take an object and dump it to the screen. -} module Ras3d where import Vec3d import Mat3d import Tri3d import Obj3d import Flat3d import Models import qualified GraphicsUtils as G helloWorld :: IO () helloWorld = G.runGraphics drawHelloWorld drawHelloWorld = do w <- G.openWindow "Hello World Window" (300, 300) G.drawInWindow w (G.text (100,100) "Hello") G.drawInWindow w (G.text (100,200) "World") G.getKey w G.closeWindow w draw :: FlatObj3 -> Float -> Float -> Float -> IO () draw obj x y z = G.runGraphics $ do w <- G.openWindow "3D Window" (300,300) prepDraw w obj x y z G.getKey w G.closeWindow w innerAnim :: G.Window -> FlatObj3 -> [Float] -> [Float] -> [Float] -> IO () innerAnim w obj (x:xs) (y:ys) (z:zs) = do prepDraw w obj x y z G.drawInWindow w blank innerAnim w obj xs ys zs innerAnim _ _ [] _ _ = return () innerAnim _ _ _ [] _ = return () innerAnim _ _ _ _ [] = return () anim :: FlatObj3 -> [Float] -> [Float] -> [Float] -> IO () anim obj x y z = G.runGraphics $ do w <- G.openWindow "3D anim" (300,300) innerAnim w obj x y z prepDraw :: G.Window -> FlatObj3 -> Float -> Float -> Float -> IO () prepDraw w obj x y z = drawObj3 w (rotObj obj x y z) drawFlatTri2 test1 :: FlatTri2 -> IO () test1 tri = G.runGraphics $ do w <- G.openWindow "Test1" (300,300) dumbTest w tri G.getKey w G.drawInWindow w blank G.getKey w G.closeWindow w test2 :: FlatObj2 -> IO () test2 obj = G.runGraphics $ do w <- G.openWindow "Test2" (300,300) drawObj2 w obj drawFlatTri2 blank :: G.Graphic blank = G.withRGB (G.RGB 0 0 0) (G.polygon [(0,0), (300,0), (300,300), (0,300)]) -- Some movement in the y main1 = draw model3 0.0 0.0 0.0 main2 = draw model3 0.0 0.20 0.0 main3 = draw model3 0.0 0.10 0.0 main4 = draw model3 0.0 0.05 0.0 -- Rotation in the x main5 = draw model3 0.20 0.0 0.0 main6 = draw model3 0.10 0.0 0.0 main7 = draw model3 0.05 0.0 0.0 main8 = anim model3 zero turnY zero main9 = anim model3 turnY zero zero main10 = anim model3 zero zero turnY main11 = anim model3 turnY turnY zero main12 = anim model3 zero turnY turnY main13 = anim model3 turnY zero turnY main14 = anim model3 turnY turnY turnY main15 = anim model5 turnY turnY turnY turnY :: [Float] turnY = makeTurn 0.0 0.20 0.001 makeTurn :: Float -> Float -> Float -> [Float] makeTurn lo hi incr = if lo < hi then lo : (makeTurn (lo + incr) hi incr) else [] zero :: [Float] zero = 0 : zero