{-# LANGUAGE RecordWildCards #-}
module Main where
import Codec.Wavefront
import qualified Data.ByteString as BS
import Data.Vector ((!))
import qualified Data.Vector as V
import System.Environment (getArgs)
import qualified Utmyen.Model.Type as U
main :: IO ()
main = do
args <- getArgs
case args of
[] -> putStrLn "Usage: obj2utm [file]"
(f:_) -> do
Right WavefrontOBJ { .. } <- fromFile f
let mkPoly (FaceIndex { faceLocIndex = i
, faceTexCoordIndex = Just j
, faceNorIndex = Just k }) =
U.Point x y z a b c u v
where Location x y z _ = objLocations ! (i - 1)
TexCoord u v _ = objTexCoords ! (j - 1)
Normal a b c = objNormals ! (k - 1)
let polys = [ [ mkPoly a, mkPoly b, mkPoly c ]
| Element { elValue = Face a b c [] } <- V.toList objFaces
]
polys' = concat polys
let model = U.Model { U.modelPoints = V.fromList polys'
, U.modelTris = V.fromList [0..fromIntegral (length polys') - 1]
}
BS.putStr (U.encode model)