scenegraph-0.1.0.1: Scene GraphSource codeContentsIndex
Graphics.SceneGraph.Basic
Portabilityportable
Stabilityexperimental
Maintainermwassell@bigpond.net.au
Description

Definition of types and combinators.

Construction of the graph is done within a Monad (OSGT). osg is then used to extract the Scene.

Synopsis
data SceneNode = SceneNode (Node, String) SceneData
type SceneGraph = Gr SceneNode ()
type OSG = OSGT Identity
type Scene = (SceneGraph, Node)
data Colour
= Grey
| JustWhite
| Red
| Green
| Blue
| Black
| LightBlue
| White
| Yellow
data SceneData
= Group
| Geode Geometry
| LOD
| MatrixTransform MatrixD
| Switch Int
| Material Phong
| Handler (Maybe (ClickHandler, Sink ())) (Maybe (DragHandler, Sink GLdouble))
| Light
| Camera
| Texture String
| Text String
data Phong = Phong {
emissionPh :: Maybe (Color4 GLfloat)
ambientPh :: Maybe (Color4 GLfloat)
diffusePh :: Maybe (Color4 GLfloat)
specularPh :: Maybe (Color4 GLfloat)
shinePh :: Maybe GLfloat
reflectivePh :: Maybe (Color4 GLfloat)
reflectivityPh :: Maybe GLfloat
transparentPh :: Maybe (Color4 GLfloat)
tranparencyPh :: Maybe GLfloat
}
data Geometry
= GLObj Object
| Mesh1 [(PrimitiveMode, Int, Int)] [VectorD] [VectorD]
| Mesh2 [(PrimitiveMode, Int, Int)] (Array Int (VectorD, VectorD, Maybe VectorD))
| Mesh3 [VectorD]
| BezierMesh [[[Vertex3 GLfloat]]]
emptyOSG :: SceneGraph
data OSGState = OSGState {
gr :: SceneGraph
context :: [SceneNode]
heap :: Map Int SceneNode
startNode :: Int
root :: Int
selfRef :: Maybe OSGStateRef
}
emptyState
emptyStateWithRef :: IO OSGState
newPhong
nullNode
trivialGr :: SceneNode -> SceneGraph
addNode' :: OSGState -> SceneNode -> [((), Node)] -> (SceneNode, OSGState)
addNullNode :: Monad m => OSGT m SceneNode
addNodeBasic :: Monad m => SceneNode -> OSGT m SceneNode
addBasicNode
addBasicNamedNode
addNode :: Monad m => SceneNode -> [((), Node)] -> OSGT m SceneNode
replaceNode :: Monad m => SceneNode -> OSGT m SceneNode
findCamera :: Scene -> Int -> Node
findCameraPath :: Scene -> Int -> Path
rotateX :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNode
rotateY :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNode
rotateZ :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNode
torus :: Monad m => Float -> OSGT m SceneNode
sphere :: Monad m => Float -> OSGT m SceneNode
tetra :: Monad m => OSGT m SceneNode
line :: Monad m => VectorD -> VectorD -> OSGT m SceneNode
cube :: Monad m => GLdouble -> OSGT m SceneNode
switchHandler :: ClickHandler
light :: Monad m => OSGT m SceneNode
camera :: Monad m => OSGT m SceneNode
plane :: Monad m => Int -> OSGT m SceneNode
texture :: Monad m => OSGT m SceneNode -> String -> OSGT m SceneNode
planeQ :: Monad m => Int -> OSGT m SceneNode
text :: Monad m => String -> OSGT m SceneNode
scaleS :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNode
scale :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNode
translate :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNode
rotate :: Monad m => OSGT m SceneNode -> (GLdouble, VectorD) -> OSGT m SceneNode
(<+>) :: Monad m => OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNode
(<*>) :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNode
(</>) :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNode
strip :: Monad m => OSGT m SceneNode
switch :: Monad m => OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNode
switch' :: Monad m => Int -> OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNode
switchNode'
translateSG' :: SceneGraph -> Node -> VectorD -> SceneGraph
rotatePostSG' :: SceneGraph -> Node -> VectorD -> GLdouble -> SceneGraph
translatePostSG' :: SceneGraph -> Node -> VectorD -> SceneGraph
colour :: Monad m => OSGT m SceneNode -> Colour -> OSGT m SceneNode
cylinder :: Monad m => GLfloat -> GLfloat -> OSGT m SceneNode
osg :: Monad m => OSGT m SceneNode -> m Scene
runOSG :: Monad m => OSGState -> OSGT m SceneNode -> m (SceneNode, OSGState, Node)
r :: GLdouble
llab
getTransformTo :: Scene -> Node -> MatrixD
findHandlerDown :: SceneGraph -> Int -> Int
findTextDown :: SceneGraph -> Int -> Int
type OSGT m = StateT OSGState m
replaceNode'' :: SceneGraph -> SceneNode -> SceneGraph
handler :: Monad m => OSGT m SceneNode -> ClickHandler -> OSGT m SceneNode
handler2 :: Monad m => OSGT m SceneNode -> (ClickHandler, DragHandler) -> OSGT m SceneNode
handleClickEvent :: Scene -> GLuint -> KeyState -> IO (Scene, Maybe Scene, Maybe (SceneGraph -> SceneGraph))
label :: Monad m => OSGT m SceneNode -> String -> OSGT m SceneNode
getByLabel :: SceneGraph -> String -> Node
getHitAction :: Scene -> GLuint -> IO ()
findHandler :: SceneGraph -> GLuint -> Maybe SceneNode
replaceNode' :: Monad md => SceneGraph -> SceneNode -> md SceneGraph
newtype OSGStateRef = OSGStateRef {
getOSR :: IORef OSGState
}
data SinkValue
= SVD GLdouble
| SVB Bool
| SVT String
dragHandler :: DragHandler
Documentation
data SceneNode Source
Scene Node. Made up of data and maybe a widget
Constructors
SceneNode (Node, String) SceneData
show/hide Instances
type SceneGraph = Gr SceneNode ()Source
Scene Graph based on a Graph
type OSG = OSGT IdentitySource
type Scene = (SceneGraph, Node)Source
Scene Graph with indicate root node
data Colour Source
Simple colours
Constructors
Grey
JustWhite
Red
Green
Blue
Black
LightBlue
White
Yellow
show/hide Instances
data SceneData Source
Scene Node Data.
Constructors
Group
Geode Geometry
LOD
MatrixTransform MatrixD
Switch Int
Material Phong
Handler (Maybe (ClickHandler, Sink ())) (Maybe (DragHandler, Sink GLdouble))
Light
Camera
Texture String
Text String
show/hide Instances
data Phong Source
Phong colouring
Constructors
Phong
emissionPh :: Maybe (Color4 GLfloat)
ambientPh :: Maybe (Color4 GLfloat)
diffusePh :: Maybe (Color4 GLfloat)
specularPh :: Maybe (Color4 GLfloat)
shinePh :: Maybe GLfloat
reflectivePh :: Maybe (Color4 GLfloat)
reflectivityPh :: Maybe GLfloat
transparentPh :: Maybe (Color4 GLfloat)
tranparencyPh :: Maybe GLfloat
show/hide Instances
data Geometry Source

Geometry. Either a basic GL object or a mesh.

FIXME - Reduce number of mesh types - to whatever is easier to draw (I suppose)

Constructors
GLObj Object
Mesh1 [(PrimitiveMode, Int, Int)] [VectorD] [VectorD]
Mesh2 [(PrimitiveMode, Int, Int)] (Array Int (VectorD, VectorD, Maybe VectorD))
Mesh3 [VectorD]
BezierMesh [[[Vertex3 GLfloat]]]
show/hide Instances
emptyOSG :: SceneGraphSource
data OSGState Source
Holds state of graph as it is built.
Constructors
OSGState
gr :: SceneGraph
context :: [SceneNode]
heap :: Map Int SceneNode
startNode :: Int
root :: Int
selfRef :: Maybe OSGStateRef
show/hide Instances
emptyState
emptyStateWithRef :: IO OSGStateSource

Empty state

Empty state with the self reference set

newPhong
nullNode
trivialGr :: SceneNode -> SceneGraphSource

Creates an empty scene graph

Creates a scene graph containing the supplied node

addNode' :: OSGState -> SceneNode -> [((), Node)] -> (SceneNode, OSGState)Source
Non-monadic form of addNode
addNullNode :: Monad m => OSGT m SceneNodeSource

Add node with scene data

Add node with scene data

Add empty node

addNodeBasic :: Monad m => SceneNode -> OSGT m SceneNodeSource
Basic add node
addBasicNode
addBasicNamedNode
addNode :: Monad m => SceneNode -> [((), Node)] -> OSGT m SceneNodeSource
Add a node to a scene graph with supplied children
replaceNode :: Monad m => SceneNode -> OSGT m SceneNodeSource
Replace a Scene Node
findCamera :: Scene -> Int -> NodeSource
findCameraPath :: Scene -> Int -> PathSource
rotateX :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNodeSource
Rotate a node around X axis
rotateY :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNodeSource
Rotate a node around Y axis
rotateZ :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNodeSource
Rotate a node around Z axis
torus :: Monad m => Float -> OSGT m SceneNodeSource
Create a node containing a torus.
sphere :: Monad m => Float -> OSGT m SceneNodeSource
Create a node containing a sphere
tetra :: Monad m => OSGT m SceneNodeSource
Create a node containing a tetrahedron
line :: Monad m => VectorD -> VectorD -> OSGT m SceneNodeSource
Create a node containing a line
cube :: Monad m => GLdouble -> OSGT m SceneNodeSource
Create a node containing a cube. Fixme: Faces are not orientated same way.
switchHandler :: ClickHandlerSource
Create a ClickHandler
light :: Monad m => OSGT m SceneNodeSource
Create a light
camera :: Monad m => OSGT m SceneNodeSource
Create a camera
plane :: Monad m => Int -> OSGT m SceneNodeSource
texture :: Monad m => OSGT m SceneNode -> String -> OSGT m SceneNodeSource
Add texture
planeQ :: Monad m => Int -> OSGT m SceneNodeSource
text :: Monad m => String -> OSGT m SceneNodeSource
Add Text
scaleS :: Monad m => OSGT m SceneNode -> GLdouble -> OSGT m SceneNodeSource
Scale a node by equal amounts in all directions
scale :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNodeSource
Scale a node
translate :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNodeSource
Translate a node
rotate :: Monad m => OSGT m SceneNode -> (GLdouble, VectorD) -> OSGT m SceneNodeSource
Rotate a node by an angle around a vector.
(<+>) :: Monad m => OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNodeSource
Join two graphs together
(<*>) :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNodeSource
Translate a node
(</>) :: Monad m => OSGT m SceneNode -> VectorD -> OSGT m SceneNodeSource
Scale a node
strip :: Monad m => OSGT m SceneNodeSource
Get a strip mesh
switch :: Monad m => OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNodeSource
Create a switch node
switch' :: Monad m => Int -> OSGT m SceneNode -> OSGT m SceneNode -> OSGT m SceneNodeSource
switchNode'
translateSG' :: SceneGraph -> Node -> VectorD -> SceneGraphSource
rotatePostSG' :: SceneGraph -> Node -> VectorD -> GLdouble -> SceneGraphSource
translatePostSG' :: SceneGraph -> Node -> VectorD -> SceneGraphSource
colour :: Monad m => OSGT m SceneNode -> Colour -> OSGT m SceneNodeSource
Add colour to a node
cylinder :: Monad m => GLfloat -> GLfloat -> OSGT m SceneNodeSource
Create cylinder as a BezierMesh
osg :: Monad m => OSGT m SceneNode -> m SceneSource
Wrapper for running the OSG monad to return a scene graph and root node.
runOSG :: Monad m => OSGState -> OSGT m SceneNode -> m (SceneNode, OSGState, Node)Source
Create and run a OSG monad to return a scene graph and root node.
r :: GLdoubleSource
llab
getTransformTo :: Scene -> Node -> MatrixDSource
Return the matrix got by traversing down the Node
findHandlerDown :: SceneGraph -> Int -> IntSource
Work down the tree from indicated no to find the first handler scene node.
findTextDown :: SceneGraph -> Int -> IntSource
type OSGT m = StateT OSGState mSource
The OSG monad within which construction of scene graphs occur. was 'type OSGT m = ErrorT Throwable (ST.StateT OSGState m)'
replaceNode'' :: SceneGraph -> SceneNode -> SceneGraphSource
Actually does the job of replacing node in a scene graph
handler :: Monad m => OSGT m SceneNode -> ClickHandler -> OSGT m SceneNodeSource
Add an handler node
handler2 :: Monad m => OSGT m SceneNode -> (ClickHandler, DragHandler) -> OSGT m SceneNodeSource
handleClickEvent :: Scene -> GLuint -> KeyState -> IO (Scene, Maybe Scene, Maybe (SceneGraph -> SceneGraph))Source
Handle some event
label :: Monad m => OSGT m SceneNode -> String -> OSGT m SceneNodeSource
Label a node
getByLabel :: SceneGraph -> String -> NodeSource
getHitAction :: Scene -> GLuint -> IO ()Source
findHandler :: SceneGraph -> GLuint -> Maybe SceneNodeSource
Work up the tree from indicated no to find the first handler scene node.
replaceNode' :: Monad md => SceneGraph -> SceneNode -> md SceneGraphSource
Inner monad version of replace node
newtype OSGStateRef Source
Constructors
OSGStateRef
getOSR :: IORef OSGState
show/hide Instances
data SinkValue Source
Constructors
SVD GLdouble
SVB Bool
SVT String
dragHandler :: DragHandlerSource
Create a DragHandler
Produced by Haddock version 2.4.2