Changeset 69
- Timestamp:
- 05/26/08 01:04:37 (3 months ago)
- Files:
-
- trunk/bin/yage3d.exe (modified) (previous)
- trunk/doc/api/yage.core.color.html (added)
- trunk/doc/api/yage.resource.modelloader.html (deleted)
- trunk/src/demo1/main.d (modified) (2 diffs)
- trunk/src/yage/node/all.d (modified) (3 diffs)
- trunk/src/yage/node/base.d (modified) (3 diffs)
- trunk/src/yage/node/movable.d (added)
- trunk/src/yage/node/moveable.d (deleted)
- trunk/src/yage/node/node.d (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/demo1/main.d
r68 r69 38 38 Log.write("Starting update loop."); 39 39 Scene scene = new Scene(); 40 scene.start(60); // update 60 times per second40 //scene.start(60); // update 60 times per second 41 41 42 42 Device.onExit = &scene.stop; … … 147 147 //} 148 148 delta.reset(); 149 scene.update(dtime); 149 150 150 151 Input.processInput(); trunk/src/yage/node/all.d
r59 r69 13 13 14 14 public 15 { import yage.node. base;15 { import yage.node.movable; 16 16 import yage.node.camera; 17 17 import yage.node.graph; … … 19 19 import yage.node.model; 20 20 import yage.node.node; 21 import yage.node.base; 22 import yage.node.movable; 21 23 import yage.node.scene; 22 24 import yage.node.sprite; … … 24 26 import yage.node.terrain; 25 27 } 26 public import yage.node.node: Node;27 public import yage.node.camera: CameraNode;trunk/src/yage/node/base.d
r67 r69 13 13 import yage.node.node; 14 14 import yage.node.scene; 15 import yage.node.mov eable;15 import yage.node.movable; 16 16 17 17 /** … … 26 26 BaseNode parent; 27 27 Node[Node] children; 28 29 protected Matrix transform; // The position and rotation of this node relative to its parent 30 protected Matrix transform_abs; // The position and rotation of this node in worldspace coordinates 31 protected bool transform_dirty=true; // The absolute transformation matrix needs to be recalculated. 32 33 protected Vec3f linear_velocity; 34 protected Vec3f angular_velocity; 35 protected Vec3f linear_velocity_abs; // Store a cached version of the absolute linear velocity. 36 protected Vec3f angular_velocity_abs; 37 protected bool velocity_dirty=true; // The absolute velocity vectors need to be recalculated. 38 39 // Rendering and scene-graph updates run in different threads. 40 // If the scene is rendered halfway through updating, rendering glitches may occur. 41 // Therefore, the scene-graph implements a sort of "triple buffering". 42 // Each node has three extra copies of its relative and absolute transform matrices. 43 // The renderer simply uses the copy (buffer) that isn't being updated. A third copy 44 // exists so neither the renderer or updater need to wait on one another. 45 struct Cache 46 { Matrix transform; 47 Matrix transform_abs; 48 } 49 protected Cache cache[3]; 50 28 51 29 52 protected void delegate(BaseNode self) on_update = null; // called on update 30 31 mixin MoveableNode;32 53 33 54 /// Prohibit manual deletion of Nodes. node.remove() must be used. 34 55 delete(void* p) 35 { throw new Exception("Nodes cannot be deleted. ");56 { throw new Exception("Nodes cannot be deleted. Use remove()."); 36 57 } 37 58 … … 135 156 // This prevents rendering a halfway-updated scenegraph. 136 157 cache[scene.transform_write].transform = transform; 137 cache[scene.transform_write].transform_abs = getAbsoluteTransform(); 158 if (transform_dirty) 159 calcTransform(); 160 cache[scene.transform_write].transform_abs = transform_abs; 138 161 139 162 // Call the onUpdate() function trunk/src/yage/node/node.d
r68 r69 19 19 import yage.node.light; 20 20 import yage.node.base; 21 import yage.node.mov eable;21 import yage.node.movable; 22 22 import yage.system.constant; 23 23 import yage.system.device; … … 34 34 * through every child node. Likewise, updating of position and rotation 35 35 * occurs recusively from Scene's update() method. All Node methods that deal 36 * with position or velocity are separated into yage.node.mov eable to keep things36 * with position or velocity are separated into yage.node.movable to keep things 37 37 * tidier. 38 38 * 39 39 * See_Also: 40 * yage.node.Mov eableNode40 * yage.node.MovableNode 41 41 * yage.node.BaseNode 42 42 * … … 57 57 * -------------------------------- 58 58 */ 59 class Node : BaseNode59 class Node : MovableNode 60 60 { 61 61 protected bool onscreen = true; // used internally by cameras to mark if they can see this node.
