diff Renderer/Engine/SceneGraphRoot.cc @ 762:10a8a80c2ea7

add lights
author yutaka@henri.cr.ie.u-ryukyu.ac.jp
date Sat, 06 Feb 2010 03:02:48 +0900
parents 24a37fe8419a
children 987d4cced279
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc	Thu Feb 04 14:50:01 2010 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Sat Feb 06 03:02:48 2010 +0900
@@ -25,7 +25,6 @@
     sg_src = (SceneGraphPtr*) malloc(sizeof(SceneGraphPtr)*SGLIST_LENGTH);
 
     camera = new Camera(w, h, this);
-    light = new SceneGraph;
     iterator = new SceneGraphIterator;
     controller = create_controller();
 
@@ -41,9 +40,14 @@
     //int size = 4;
     //light_vector = (float*)malloc(sizeof(float)*size);
 
-    light->xyz[0] = 0;
-    light->xyz[1] = 0;
-    light->xyz[2] = 0;
+    int light_num = 4;
+
+    for (int i = 0; i < light_num; i++) {
+      light[i] = new SceneGraph;
+      light[i]->xyz[0] = 0;
+      light[i]->xyz[1] = 0;
+      light[i]->xyz[2] = 0;
+    }
 
     move_finish_flag = 0;
     // TODO
@@ -74,7 +78,10 @@
 
     free(sg_src);
     delete camera;
-    delete light;
+    int light_num = 4;
+    for (int i = 0; i < light_num; i++) {
+      delete light[i];
+    }
     delete iterator;
     delete controller;
 }
@@ -415,17 +422,23 @@
         list = list->next;
     }    
 
-    get_matrix(light->matrix, light->angle, light->xyz, camera->matrix);
+    int light_num = 4;
+    for (int i = 0; i < light_num; i++) {
 
-    light_vector[0] = 0.0f;
-    light_vector[1] = 0.0f;
-    light_vector[2] = 0.0f;
-    light_vector[3] = 1.0f;
+      get_matrix(light[i]->matrix, light[i]->angle, light[i]->xyz, camera->matrix);
+      
+      light_vector[i*4] = 0.0f;
+      light_vector[i*4+1] = 0.0f;
+      light_vector[i*4+2] = 0.0f;
+      light_vector[i*4+3] = 1.0f;
 
-    ApplyMatrix(light_vector, light->matrix);
+      ApplyMatrix(&light_vector[i*4], light[i]->matrix);
+      
+      light_vector[i*4] /= light_vector[i*4+2];
+      light_vector[i*4+1] /= light_vector[i*4+2];
 
-    light_vector[0] /= light_vector[2];
-    light_vector[1] /= light_vector[2];
+    }
+
    
     if(sg_exec_tree != NULL) {
 	return;
@@ -522,17 +535,23 @@
     list->frame++; 
     list = list->next;
 
-    get_matrix(light->matrix, light->angle, light->xyz, camera->matrix);
+
+    int light_num = 4;
+    for (int i = 0; i < light_num; i++) {
 
-    light_vector[0] = 0.0f;
-    light_vector[1] = 0.0f;
-    light_vector[2] = 0.0f;
-    light_vector[3] = 1.0f;
+      get_matrix(light[i]->matrix, light[i]->angle, light[i]->xyz, camera->matrix);
+      
+      light_vector[i*4] = 0.0f;
+      light_vector[i*4+1] = 0.0f;
+      light_vector[i*4+2] = 0.0f;
+      light_vector[i*4+3] = 1.0f;
 
-    ApplyMatrix(light_vector, light->matrix);
+      ApplyMatrix(&light_vector[i*4], light[i]->matrix);
+      
+      light_vector[i*4] /= light_vector[i*4+2];
+      light_vector[i*4+1] /= light_vector[i*4+2];
 
-    light_vector[0] /= light_vector[2];
-    light_vector[1] /= light_vector[2];
+    }
    
     if(sg_exec_tree != NULL) {
 	return;
@@ -549,18 +568,23 @@
 
     list->frame++; 
     //list = list->next;
-    
-    get_matrix(light->matrix, light->angle, light->xyz, camera->matrix);
+
+    int light_num = 4;
+    for (int i = 0; i < light_num; i++) {
 
-    light_vector[0] = 0.0f;
-    light_vector[1] = 0.0f;
-    light_vector[2] = 0.0f;
-    light_vector[3] = 1.0f;
+      get_matrix(light[i]->matrix, light[i]->angle, light[i]->xyz, camera->matrix);
+      
+      light_vector[i*4] = 0.0f;
+      light_vector[i*4+1] = 0.0f;
+      light_vector[i*4+2] = 0.0f;
+      light_vector[i*4+3] = 1.0f;
 
-    ApplyMatrix(light_vector, light->matrix);
+      ApplyMatrix(&light_vector[i*4], light[i]->matrix);
+      
+      light_vector[i*4] /= light_vector[i*4+2];
+      light_vector[i*4+1] /= light_vector[i*4+2];
 
-    light_vector[0] /= light_vector[2];
-    light_vector[1] /= light_vector[2];
+    }    
     
     //sgchange->viewer->light_xyz_stock = getLightVector();
 }
@@ -660,10 +684,10 @@
 
 
 SceneGraphPtr
-SceneGraphRoot::getLight()
+SceneGraphRoot::getLight(int id)
 {
 
-  return light;
+  return light[id];
 
 }