diff options
author | Marc Sunet <jeannekamikaze@gmail.com> | 2012-08-01 13:20:17 +0200 |
---|---|---|
committer | Marc Sunet <jeannekamikaze@gmail.com> | 2012-08-01 13:20:17 +0200 |
commit | ada455ccc1898826d55cbe275da895d80b792cd5 (patch) | |
tree | 360da88a99266ff2ca3ba649e64b71474193b2cf | |
parent | f8205d7d70d5edd953e3efd77abb8c67dc95db94 (diff) |
fixed inverse transform, added orbit and lookAt functions
-rw-r--r-- | Spear.lkshs | 12 | ||||
-rw-r--r-- | Spear.lkshw | 4 | ||||
-rw-r--r-- | Spear/Assets/Model/MD2/MD2_load.c | 6 | ||||
-rw-r--r-- | Spear/Math/Matrix4.hs | 31 | ||||
-rw-r--r-- | Spear/Math/Vector3.hs | 6 |
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 @@ | |||
1 | Version of session file format: | 1 | Version of session file format: |
2 | 1 | 2 | 1 |
3 | Time of storage: | 3 | Time of storage: |
4 | "Tue Jul 31 01:00:21 CEST 2012" | 4 | "Wed Aug 1 13:16:07 CEST 2012" |
5 | Layout: 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 | 5 | Layout: 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 |
6 | Population: [(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])] | 6 | Population: [(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])] |
7 | Window size: (1796,979) | 7 | Window size: (1796,979) |
8 | Completion size: | 8 | Completion size: |
9 | (750,400) | 9 | (750,400) |
10 | Workspace: Just "/home/jeanne/programming/haskell/Spear/Spear.lkshw" | 10 | Workspace: Just "/home/jeanne/programming/haskell/Spear/Spear.lkshw" |
11 | Active pane: Just "GameMessage.hs" | 11 | Active pane: Just "GameObject.hs" |
12 | Toolbar visible: | 12 | Toolbar visible: |
13 | True | 13 | True |
14 | FindbarState: (False,FindState {entryStr = "", entryHist = ["asd","MouseButton"], replaceStr = "MouseProperty", replaceHist = [], caseSensitive = False, entireWord = False, wrapAround = False, regex = False, lineNr = 1}) | 14 | FindbarState: (False,FindState {entryStr = "asd", entryHist = ["col","forward","asd","MouseButton"], replaceStr = "row", replaceHist = [], caseSensitive = False, entireWord = False, wrapAround = False, regex = False, lineNr = 1}) |
15 | Recently opened files: | 15 | Recently 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"] |
17 | Recently opened workspaces: | 17 | Recently 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 @@ | |||
1 | Version of workspace file format: | 1 | Version of workspace file format: |
2 | 1 | 2 | 1 |
3 | Time of storage: | 3 | Time of storage: |
4 | "Tue Jul 31 00:59:07 CEST 2012" | 4 | "Tue Jul 31 20:32:45 CEST 2012" |
5 | Name of the workspace: | 5 | Name of the workspace: |
6 | "Spear" | 6 | "Spear" |
7 | File paths of contained packages: | 7 | File paths of contained packages: |
8 | ["demos/simple-scene/simple-scene.cabal","Spear.cabal"] | 8 | ["demos/simple-scene/simple-scene.cabal","Spear.cabal"] |
9 | Maybe file path of an active package: | 9 | Maybe 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. | ||
200 | lookAt :: Vector3 -- ^ Eye position. | 198 | lookAt :: Vector3 -- ^ Eye position. |
201 | -> Vector3 -- ^ Target point. | 199 | -> Vector3 -- ^ Target point. |
202 | -> Vector3 -- ^ Up vector. | ||
203 | -> Matrix4 | 200 | -> Matrix4 |
204 | 201 | ||
205 | lookAt pos target up = | 202 | lookAt 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. |
414 | inverseTransform :: Matrix4 -> Matrix4 | 412 | inverseTransform :: Matrix4 -> Matrix4 |
415 | inverseTransform mat = mat4fromVec u v w p where | 413 | inverseTransform 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 | ||