Browse Source

Scene design document

Panagiotis Christopoulos Charitos 14 years ago
parent
commit
7dddabd97e
2 changed files with 80 additions and 31 deletions
  1. 78 29
      docs/drafts/scene-abstraction.txt
  2. 2 2
      src/scene/Camera.h

+ 78 - 29
docs/drafts/scene-abstraction.txt

@@ -5,39 +5,88 @@ Create a new scene organisation that follows some rules:
 
 Every scene node has a few properties that are actually interfaces. This interfaces are:
 
-+======================+==================+=================================+=================+
-| Class name           | Base class       | Interface                       | Used            |
-+======================+==================+=================================+=================+
-| BaseRenderable       | -                | - getVao                        | -               |
-|                      |                  | - getVertIdsNum                 |                 |
-|                      |                  | - getWorldTransform             |                 |
-+----------------------+------------------+---------------------------------+-----------------+
-| Renderable           | BaseRenderable   | - getMaterial                   | PatchNode       |
-|                      |                  | - getMaterialRuntime (Mutable)  |                 |
-|                      |                  | - getMaterialRuntime (Const)    |                 |
-|                      |                  | - renderInMs (its not virtual)  |                 |
-+----------------------+------------------+---------------------------------+-----------------+
-| DebugRenderable      | BaseRenderable   |                                 | Camera, Light   |
-+----------------------+------------------+---------------------------------+-----------------+
-| IsRenderable         | BaseRenderable   | getShaderProgram                | Light           |
-+----------------------+------------------+---------------------------------+-----------------+
-| VisiblesContainable  | -                | getVisibilityInfo               | Camera, Light   |
-+----------------------+------------------+---------------------------------+-----------------+
++========================+==================+=================================+=====================+
+| Class name             | Base class       | Interface                       | Used                |
++========================+==================+=================================+=====================+
+| BaseRenderable         | -                | - getVao                        | -                   |
+|                        |                  | - getVertIdsNum                 |                     |
+|                        |                  | - getWorldTransform             |                     |
++------------------------+------------------+---------------------------------+---------------------+
+| Renderable             | BaseRenderable   | - getMaterial                   | PatchNode           |
+|                        |                  | - getMaterialRuntime (Mutable)  |                     |
+|                        |                  | - getMaterialRuntime (Const)    |                     |
+|                        |                  | - renderInMs (its not virtual)  |                     |
++------------------------+------------------+---------------------------------+---------------------+
+| DebugRenderable        | BaseRenderable   | TODO                            | Camera, Light       |
++------------------------+------------------+---------------------------------+---------------------+
+| IsRenderable           | BaseRenderable   | getShaderProgram                | Light               |
++------------------------+------------------+---------------------------------+---------------------+
+| VisiblesContainable    | -                | - getVisiblesInfo               | Camera, Light       |
+|                        |                  | - testFrustum(VisibleCheckable) |                     |
++------------------------+------------------+---------------------------------+---------------------+
+| VisibleCheckable       | -                | getCollisionShape               | Camera, Light,      |
+|                        |                  |                                 | ModelNode, SkinNode,|
+|                        |                  |                                 | PatchNode           |
++------------------------+------------------+---------------------------------+---------------------+
+| RenderablesContainable | -                | - getRenderables                | ModelNode, SkinNode |
+|                        |                  | - nodesInheritCollisionShape    |                     |
++------------------------+------------------+---------------------------------+---------------------+
 	
+Other classes:
 	
-**VisiblesContainable**
- (Camera, Light)
-	Interface for providing info about nodes that are inside this node and 
-	method for checking other nodes is they are visible
+**VisiblesInfo**: Contains the lists of:
 
-	
-VisibleCheckable: (Camera, Light, ModelNode, SkinNode, PatchNode)
-	Interface for providing a CollisionShape for visibility testing
-
-	
-VisiblesInfo: Contains the lists of:
 	- Renderables
+		- renderables in MS
+		- renderables in BS
 	- Lights
-	
+		- point lights
+		- spot lights
+		
+==================
+Visibility testing
+==================
+
+::
+
+	function test(VisiblesContainable obj)
+		for node in nodes
+			set node not visible
+		endfor
+		
+		for node in nodes
+			if node is RenderablesContainable
+				if node ouside frustum 
+					break
+				endif
+			
+				if node is nodesInheritCollisionShape
+					for subnode in node's renderables
+						set subnode visible
+					end for
+				else
+					for subnode in node's renderables
+					
+				endif
+			
+				if node inside frustum of obj
+					cam push back
+				endif
+			endif
+		endfor
+	endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 

+ 2 - 2
src/scene/Camera.h

@@ -17,7 +17,7 @@ class PointLight;
 /// @{
 
 /// Camera SceneNode interface class
-class Camera: public SceneNode, public VisibilityNode
+class Camera: public VisibilityNode
 {
 	public:
 		/// @note Don't EVER change the order
@@ -141,7 +141,7 @@ class Camera: public SceneNode, public VisibilityNode
 
 inline Camera::Camera(CameraType t, Scene& scene, ulong flags,
 	SceneNode* parent)
-:	SceneNode(SNT_CAMERA, scene, flags, parent),
+:	VisibilityNode(VNT_CAMERA, scene, flags, parent),
  	type(t)
 {
 	name = "Camera:" + name;