prepared parsing of meshes
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Scene.Parser (parseScene) where
|
||||
module Scene.Parser (parseScene, parseMesh) where
|
||||
|
||||
import Control.Applicative
|
||||
import Data.Attoparsec.ByteString.Char8
|
||||
@ -75,7 +75,7 @@ parseObject = do
|
||||
return $ OpL (Light p c i)
|
||||
"sphere" -> parseSphere
|
||||
"plane" -> parsePlane
|
||||
"mesh" -> parseMesh
|
||||
"mesh" -> parseRawMesh
|
||||
_ -> undefined
|
||||
|
||||
parseCamera :: Parser ObjectParser
|
||||
@ -167,19 +167,24 @@ parseVector = do
|
||||
where
|
||||
f = fromRational . toRational --convert Double to Float
|
||||
|
||||
parseMesh :: Parser ObjectParser
|
||||
parseMesh = do
|
||||
parseRawMesh :: Parser ObjectParser
|
||||
parseRawMesh = do
|
||||
name <- takeTill isSpace
|
||||
skipSpace
|
||||
shading <- string "FLAT" <|> string "PHONG"
|
||||
skipSpace
|
||||
mat <- parseMaterial
|
||||
let shading' = case shading of
|
||||
"FLAT" = Flat
|
||||
"PHONG" = Phong
|
||||
return $ OpM Mesh
|
||||
{ meshFilename = name
|
||||
, meshShading = shading'
|
||||
, material = mat
|
||||
"FLAT" -> Flat
|
||||
"PHONG" -> Phong
|
||||
return $ OpM UIMesh
|
||||
{ uimeshFilename = name
|
||||
, uimeshShading = shading'
|
||||
, uimaterial = mat
|
||||
}
|
||||
|
||||
parseMesh :: Shading -> Material -> ByteString -> Either String ObjectParser
|
||||
parseMesh s m f = parseOnly (parseMesh' s m) (preprocess f)
|
||||
|
||||
parseMesh' :: Shading -> Material -> Parser ObjectParser
|
||||
parseMesh' s m = undefined
|
||||
|
@ -1,7 +1,9 @@
|
||||
module Scene.Types where
|
||||
|
||||
import Linear (V3)
|
||||
import Data.IntMap
|
||||
import qualified Data.Vector as V
|
||||
import Data.ByteString
|
||||
|
||||
type Color = V3 Float
|
||||
type Intensity = Float
|
||||
@ -61,29 +63,35 @@ data Plane = Plane
|
||||
data Shading = Flat | Phong
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Mesh = Mesh
|
||||
{ meshFilename :: String
|
||||
, meshShading :: Shading
|
||||
, material :: Material
|
||||
data UIMesh = UIMesh
|
||||
{ uimeshFilename :: ByteString
|
||||
, uimeshShading :: Shading
|
||||
, uimaterial :: Material
|
||||
}
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Mesh = Mesh
|
||||
{ meshShading :: Shading
|
||||
, meshMaterial :: Material
|
||||
, meshVertices :: IntMap (V3 Float)
|
||||
, meshFaces :: IntMap (V3 Int)
|
||||
, meshNormals :: IntMap (V3 Float)
|
||||
, meshFaceNormals :: IntMap (V3 Float)
|
||||
, meshBounds :: BoundingBox
|
||||
}
|
||||
deriving (Show, Eq)
|
||||
|
||||
data BoundingBox = BoundingBox
|
||||
{ boundX :: (Float, Float)
|
||||
, boundY :: (Float, Float)
|
||||
, boundZ :: (Float, Float)
|
||||
}
|
||||
|
||||
data MeshObj = MeshObj
|
||||
{ meshVertices :: V.Vector (V3 Float)
|
||||
, meshFaces :: V.Vector (V3 Float)
|
||||
, meshNormals :: V.Vector (V3 Float)
|
||||
, meshBounds :: BoundingBox
|
||||
}
|
||||
deriving (Show, Eq)
|
||||
|
||||
data ObjectParser = OpS Sphere
|
||||
| OpP Plane
|
||||
| OpM Mesh
|
||||
| OpM UIMesh
|
||||
| OpI Mesh
|
||||
| OpC Camera
|
||||
| OpL Light
|
||||
| OpR RecursionDepth
|
||||
@ -109,4 +117,4 @@ data Scene = Scene
|
||||
getMaterial :: Collidable -> Material
|
||||
getMaterial (S (Sphere _ _ m)) = m
|
||||
getMaterial (P (Plane _ _ m)) = m
|
||||
getMaterial (M (Mesh _ _ m)) = m
|
||||
getMaterial (M (Mesh _ m _ _ _ _ _)) = m
|
||||
|
Reference in New Issue
Block a user