aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Sunet <jeannekamikaze@gmail.com>2012-08-01 13:20:17 +0200
committerMarc Sunet <jeannekamikaze@gmail.com>2012-08-01 13:20:17 +0200
commitada455ccc1898826d55cbe275da895d80b792cd5 (patch)
tree360da88a99266ff2ca3ba649e64b71474193b2cf
parentf8205d7d70d5edd953e3efd77abb8c67dc95db94 (diff)
fixed inverse transform, added orbit and lookAt functions
-rw-r--r--Spear.lkshs12
-rw-r--r--Spear.lkshw4
-rw-r--r--Spear/Assets/Model/MD2/MD2_load.c6
-rw-r--r--Spear/Math/Matrix4.hs31
-rw-r--r--Spear/Math/Vector3.hs6
5 files changed, 30 insertions, 29 deletions
diff --git a/Spear.lkshs b/Spear.lkshs
index a5674ae..541f4ef 100644
--- a/Spear.lkshs
+++ b/Spear.lkshs
@@ -1,18 +1,18 @@
1Version of session file format: 1Version of session file format:
2 1 2 1
3Time of storage: 3Time of storage:
4 "Tue Jul 31 01:00:21 CEST 2012" 4 "Wed Aug 1 13:16:07 CEST 2012"
5Layout: VerticalP (TerminalP {paneGroups = fromList [], paneTabs = Just TopP, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (HorizontalP (TerminalP {paneGroups = fromList [("Browser",HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) 290) 199)], paneTabs = Just BottomP, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) 701) 953 5Layout: VerticalP (TerminalP {paneGroups = fromList [], paneTabs = Just TopP, currentPage = 1, detachedId = Nothing, detachedSize = Nothing}) (HorizontalP (TerminalP {paneGroups = fromList [("Browser",HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) 315) 217)], paneTabs = Just BottomP, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) 759) 953
6Population: [(Just (ErrorsSt ErrorsState),[SplitP RightP,SplitP TopP]),(Just (FilesSt FilesState),[SplitP RightP,SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameMessage.hs" 295)),[SplitP LeftP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameObject.hs" 5019)),[SplitP LeftP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameState.hs" 265)),[SplitP LeftP]),(Just (InfoSt (InfoState Nothing)),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP BottomP,SplitP BottomP]),(Just (LogSt LogState),[SplitP RightP,SplitP BottomP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Math/Matrix4.hs" 8726)),[SplitP LeftP]),(Just (ModulesSt (ModulesState 286 (PackageScope False,False) (Just (ModuleName ["Spear","Math","Camera"]),Nothing) (ExpanderState {packageExp = ([],[]), packageExpNoBlack = ([[0,4],[0]],[]), packageDExp = ([],[]), packageDExpNoBlack = ([],[]), workspaceExp = ([],[]), workspaceExpNoBlack = ([],[]), workspaceDExp = ([],[]), workspaceDExpNoBlack = ([],[]), systemExp = ([],[]), systemExpNoBlack = ([],[])}))),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP BottomP,SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Math/Vector3.hs" 3534)),[SplitP LeftP]),(Just (WorkspaceSt WorkspaceState),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/main.hs" 3944)),[SplitP LeftP])] 6Population: [(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Collision/Collision.hs" 61)),[SplitP LeftP]),(Just (ErrorsSt ErrorsState),[SplitP RightP,SplitP TopP]),(Just (FilesSt FilesState),[SplitP RightP,SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameObject.hs" 3739)),[SplitP LeftP]),(Just (InfoSt (InfoState Nothing)),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP BottomP,SplitP BottomP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Scene/Loader.hs" 12935)),[SplitP LeftP]),(Just (LogSt LogState),[SplitP RightP,SplitP BottomP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Math/Matrix4.hs" 14139)),[SplitP LeftP]),(Just (ModulesSt (ModulesState 286 (PackageScope False,False) (Nothing,Nothing) (ExpanderState {packageExp = ([],[]), packageExpNoBlack = ([],[]), packageDExp = ([],[]), packageDExpNoBlack = ([],[]), workspaceExp = ([],[]), workspaceExpNoBlack = ([],[]), workspaceDExp = ([],[]), workspaceDExpNoBlack = ([],[]), systemExp = ([],[]), systemExpNoBlack = ([],[])}))),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP BottomP,SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/Spear/Math/Vector3.hs" 3515)),[SplitP LeftP]),(Just (WorkspaceSt WorkspaceState),[SplitP RightP,SplitP TopP,GroupP "Browser",SplitP TopP]),(Just (BufferSt (BufferState "/home/jeanne/programming/haskell/Spear/demos/simple-scene/main.hs" 789)),[SplitP LeftP])]
7Window size: (1796,979) 7Window size: (1796,979)
8Completion size: 8Completion size:
9 (750,400) 9 (750,400)
10Workspace: Just "/home/jeanne/programming/haskell/Spear/Spear.lkshw" 10Workspace: Just "/home/jeanne/programming/haskell/Spear/Spear.lkshw"
11Active pane: Just "GameMessage.hs" 11Active pane: Just "GameObject.hs"
12Toolbar visible: 12Toolbar visible:
13 True 13 True
14FindbarState: (False,FindState {entryStr = "", entryHist = ["asd","MouseButton"], replaceStr = "MouseProperty", replaceHist = [], caseSensitive = False, entireWord = False, wrapAround = False, regex = False, lineNr = 1}) 14FindbarState: (False,FindState {entryStr = "asd", entryHist = ["col","forward","asd","MouseButton"], replaceStr = "row", replaceHist = [], caseSensitive = False, entireWord = False, wrapAround = False, regex = False, lineNr = 1})
15Recently opened files: 15Recently opened files:
16 ["/home/jeanne/programming/haskell/Spear/Spear/Collision/Collision.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Camera.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Entity.hs","/home/jeanne/programming/haskell/Spear/Spear/Scene/Scene.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Spatial.hs","/home/jeanne/programming/haskell/Spear/Spear/Assets/Image/BMP/BMP_load.c","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model/OBJ/OBJ_load.cc","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model.hsc","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model/MD2/MD2_load.c","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model/Model.h","/home/jeanne/programming/haskell/Spear/demos/simple-scene/OgroAnimation.hs","/home/jeanne/programming/haskell/Spear/Spear/App/Input.hs"] 16 ["/home/jeanne/programming/haskell/Spear/demos/simple-scene/simple.scene","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model/Model.c","/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameMessage.hs","/home/jeanne/programming/haskell/Spear/demos/simple-scene/GameState.hs","/home/jeanne/programming/haskell/Spear/Spear/Collision/Collision.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Camera.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Entity.hs","/home/jeanne/programming/haskell/Spear/Spear/Scene/Scene.hs","/home/jeanne/programming/haskell/Spear/Spear/Math/Spatial.hs","/home/jeanne/programming/haskell/Spear/Spear/Assets/Image/BMP/BMP_load.c","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model/OBJ/OBJ_load.cc","/home/jeanne/programming/haskell/Spear/Spear/Assets/Model.hsc"]
17Recently opened workspaces: 17Recently opened workspaces:
18 ["/home/jeanne/programming/haskell/Spear/Spear.lkshw","/home/jeanne/leksah.lkshw"] \ No newline at end of file 18 ["/home/jeanne/programming/haskell/Spear/Spear.lkshw","/home/jeanne/leksah.lkshw"] \ No newline at end of file
diff --git a/Spear.lkshw b/Spear.lkshw
index 47ee51d..aed85a0 100644
--- a/Spear.lkshw
+++ b/Spear.lkshw
@@ -1,10 +1,10 @@
1Version of workspace file format: 1Version of workspace file format:
2 1 2 1
3Time of storage: 3Time of storage:
4 "Tue Jul 31 00:59:07 CEST 2012" 4 "Tue Jul 31 20:32:45 CEST 2012"
5Name of the workspace: 5Name of the workspace:
6 "Spear" 6 "Spear"
7File paths of contained packages: 7File paths of contained packages:
8 ["demos/simple-scene/simple-scene.cabal","Spear.cabal"] 8 ["demos/simple-scene/simple-scene.cabal","Spear.cabal"]
9Maybe file path of an active package: 9Maybe file path of an active package:
10 Just "Spear.cabal" \ No newline at end of file 10 Just "demos/simple-scene/simple-scene.cabal" \ No newline at end of file
diff --git a/Spear/Assets/Model/MD2/MD2_load.c b/Spear/Assets/Model/MD2/MD2_load.c
index 238bc9a..c25cda8 100644
--- a/Spear/Assets/Model/MD2/MD2_load.c
+++ b/Spear/Assets/Model/MD2/MD2_load.c
@@ -451,7 +451,7 @@ Model_error_code MD2_load (const char* filename, char clockwise, char left_hande
451 currentAnimation->start = start; 451 currentAnimation->start = start;
452 currentAnimation->end = header->numFrames-1; 452 currentAnimation->end = header->numFrames-1;
453 453
454 printf ("finished loading model %s\n", filename); 454 /*printf ("finished loading model %s\n", filename);
455 printf ("numAnimations: %u\n", numAnimations); 455 printf ("numAnimations: %u\n", numAnimations);
456 printf ("animations: %p\n", animations); 456 printf ("animations: %p\n", animations);
457 457
@@ -461,8 +461,8 @@ Model_error_code MD2_load (const char* filename, char clockwise, char left_hande
461 printf ("Animation %d, name: %s, start: %d, end %d\n", 461 printf ("Animation %d, name: %s, start: %d, end %d\n",
462 i, currentAnimation->name, currentAnimation->start, currentAnimation->end); 462 i, currentAnimation->name, currentAnimation->start, currentAnimation->end);
463 currentAnimation++; 463 currentAnimation++;
464 } 464 }*/
465 465
466 model->vertices = vertices; 466 model->vertices = vertices;
467 model->normals = normals; 467 model->normals = normals;
468 model->texCoords = texCoords; 468 model->texCoords = texCoords;
diff --git a/Spear/Math/Matrix4.hs b/Spear/Math/Matrix4.hs
index a86dc84..2176e99 100644
--- a/Spear/Math/Matrix4.hs
+++ b/Spear/Math/Matrix4.hs
@@ -195,18 +195,16 @@ transform right up fwd pos = mat4
195 195
196 196
197-- | Build a transformation 'Matrix4' defined by the given position and target. 197-- | Build a transformation 'Matrix4' defined by the given position and target.
198--
199-- This function is essentially like gluLookAt.
200lookAt :: Vector3 -- ^ Eye position. 198lookAt :: Vector3 -- ^ Eye position.
201 -> Vector3 -- ^ Target point. 199 -> Vector3 -- ^ Target point.
202 -> Vector3 -- ^ Up vector.
203 -> Matrix4 200 -> Matrix4
204 201
205lookAt pos target up = 202lookAt pos target =
206 let fwd = Vector3.normalise $ target - pos 203 let fwd = Vector3.normalise $ target - pos
207 r = fwd `cross` up 204 r = fwd `cross` Vector3.unitY
205 u = r `cross` fwd
208 in 206 in
209 transform r up (-fwd) pos 207 transform r u (-fwd) pos
210 208
211 209
212-- | Zip two matrices together with the specified function. 210-- | Zip two matrices together with the specified function.
@@ -412,15 +410,18 @@ transpose m = mat4
412 410
413-- | Invert the given transformation matrix. 411-- | Invert the given transformation matrix.
414inverseTransform :: Matrix4 -> Matrix4 412inverseTransform :: Matrix4 -> Matrix4
415inverseTransform mat = mat4fromVec u v w p where 413inverseTransform mat = mat4fromVec u v w p where
416 u = vec4 (Vector4.x $ col0 mat) (Vector4.y $ col0 mat) (Vector4.z $ col0 mat) 0 414 v0 = row0 mat
417 v = vec4 (Vector4.x $ col1 mat) (Vector4.y $ col1 mat) (Vector4.z $ col1 mat) 0 415 v1 = row1 mat
418 w = vec4 (Vector4.x $ col2 mat) (Vector4.y $ col2 mat) (Vector4.z $ col2 mat) 0 416 v2 = row2 mat
419 p = vec4 tdotu tdotv tdotw 1 417 u = vec4 (Vector4.x v0) (Vector4.y v0) (Vector4.z v0) 0
420 t = -(col3 mat) 418 v = vec4 (Vector4.x v1) (Vector4.y v1) (Vector4.z v1) 0
421 tdotu = t `Vector4.dot` u 419 w = vec4 (Vector4.x v2) (Vector4.y v2) (Vector4.z v2) 0
422 tdotv = t `Vector4.dot` v 420 p = vec4 tdotu tdotv tdotw 1
423 tdotw = t `Vector4.dot` w 421 t = -(col3 mat)
422 tdotu = t `Vector4.dot` col0 mat
423 tdotv = t `Vector4.dot` col1 mat
424 tdotw = t `Vector4.dot` col2 mat
424 425
425 426
426-- | Invert the given matrix. 427-- | Invert the given matrix.
diff --git a/Spear/Math/Vector3.hs b/Spear/Math/Vector3.hs
index fad6e01..b10fd16 100644
--- a/Spear/Math/Vector3.hs
+++ b/Spear/Math/Vector3.hs
@@ -140,9 +140,9 @@ orbit center radius anglex angley =
140 sy = sin ay 140 sy = sin ay
141 cx = cos ax 141 cx = cos ax
142 cy = cos ay 142 cy = cos ay
143 px = (x center) + radius*cy*sx 143 px = x center + radius*cy*sx
144 py = (y center) + radius*sy 144 py = y center + radius*sy
145 pz = (z center) + radius*cx*cy 145 pz = z center + radius*cx*cy
146 in 146 in
147 vec3 px py pz 147 vec3 px py pz
148 148