Mercurial > hg > Members > kono > Cerium
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]; }