h-raylib-5.1.1.0: examples/basic-models/src/Main.hs
{-# OPTIONS -Wall #-}
module Main where
import Control.Monad (unless, void)
import Raylib.Core (changeDirectory, clearBackground, disableCursor, getApplicationDirectory)
import Raylib.Core.Camera (updateCamera)
import Raylib.Core.Models (drawGrid, drawModel, genMeshCube, loadModel, loadModelFromMesh)
import Raylib.Types (Camera3D (Camera3D), CameraMode (CameraModeFirstPerson), CameraProjection (CameraPerspective), Vector3 (Vector3))
import Raylib.Util (drawing, inGHCi, mode3D, whileWindowOpen_, withWindow)
import Raylib.Util.Colors (orange, white)
modelPath :: String
modelPath = (if not inGHCi then "../../../../../../../../../../" else "./") ++ "examples/basic-models/assets/Model.obj"
main :: IO ()
main = do
withWindow
650
400
"raylib [models] example - basic models"
60
( \window -> do
disableCursor
unless inGHCi (void $ changeDirectory =<< getApplicationDirectory)
mesh <- genMeshCube 2 3 4 window
cubeModel <- loadModelFromMesh mesh window
customModel <- loadModel modelPath window
let camera = Camera3D (Vector3 3 2 3) (Vector3 0 0 0) (Vector3 0 1 0) 70 CameraPerspective
whileWindowOpen_
( \c -> do
drawing
( do
clearBackground white
mode3D
c
( do
drawGrid 20 2.0
drawModel cubeModel (Vector3 0 1.5 0) 1 orange
drawModel customModel (Vector3 (-5) 1 0) 1 white
)
)
updateCamera c CameraModeFirstPerson
)
camera
)