changeset 1374:75d5eededecb draft

API compatible. and transTree fix.
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Tue, 24 Jan 2012 17:08:54 +0900
parents f97bb81a034f
children 07e5f03d0eaa
files Renderer/Engine/SceneGraphRoot.cc Renderer/Engine/viewer.cc TaskManager/Makefile.def
diffstat 3 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc	Sat Jan 21 22:25:19 2012 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Tue Jan 24 17:08:54 2012 +0900
@@ -1040,6 +1040,12 @@
     //int matrix_size = 16; // 4x4の行列の大きさ
     matrix_list *mlist = new matrix_list;
     initList(mlist);
+
+    /* 
+     * Task の引数として設定するため、
+     * ひとつの SceneGraphNode に必要な matrix を、
+     * Tree を辿ると同時にリストに登録していく
+     */
     addMatrix(mlist, cur_parent->matrix);
 
     /*removeのflagをもとにtreeを形成*/
@@ -1074,10 +1080,12 @@
                // きちんと matrix を list にできるかテストしなきゃ
              ******/
 
-            // どこかで、オブジェクトの状態は保持してないといけない。
-            // なので、c->matrix でもつ。 
-            //matrix4x4(c->out_matrix, c->matrix, cur_parent->out_matrix);
-            get_matrix(c->out_matrix, c->angle, c->xyz, cur_parent->out_matrix);
+            float m[16];
+            unitMatrix(m);
+            // matrix を直接いじるAPI と, xyz,angle を使った座標変換を共存させる
+            get_matrix(m, c->angle, c->xyz, c->matrix);
+            matrix4x4(c->out_matrix, m, cur_parent->out_matrix);
+            
 	}
 
 
@@ -1114,8 +1122,12 @@
 void
 SceneGraphRoot::treeApply(int screen_w, int screen_h)
 {
+    
+    matrix4x4(camera->out_matrix, camera->m_view, camera->m_pers);
+
     // don't calcurate sg_draw_tree's brother
-    transTree(sg_draw_tree->children, camera);
+    transTree(sg_draw_tree, camera);
+
 }
 
 
@@ -1125,16 +1137,14 @@
 void
 SceneGraphRoot::transTree(SceneGraphPtr t, SceneGraphPtr cur_parent)
 {
-    // SceneGraphPtr t = sg_draw_tree;
 
     /*removeのflagをもとにtreeを形成*/
     while (t) {
-	SceneGraphPtr c = NULL;
 	if (!t->isRemoved()) {
 	    /*親の回転、座標から、子の回転、座標を算出*/
-	    matrix4x4(t->matrix,t->matrix,cur_parent->matrix);
+	    matrix4x4(t->out_matrix,t->matrix,cur_parent->out_matrix);
 	} 
-	if (t->children != NULL && c != NULL) {
+        if (t->children != NULL) {
 	    cur_parent = t;
 	    t = t->children;
 	} else if (t->brother != NULL) {
--- a/Renderer/Engine/viewer.cc	Sat Jan 21 22:25:19 2012 +0900
+++ b/Renderer/Engine/viewer.cc	Tue Jan 24 17:08:54 2012 +0900
@@ -469,7 +469,6 @@
 
     CameraPtr camera = sgroot->getCamera();
     
-    //多分このsg_remove_listであってる?。チェック対象かも
     for (SceneGraphPtr t = sgroot->sg_remove_list; t != NULL; t = t->next) {
       if (t->size > 0) {
         pp_sum_num += t->pp_num;
--- a/TaskManager/Makefile.def	Sat Jan 21 22:25:19 2012 +0900
+++ b/TaskManager/Makefile.def	Tue Jan 24 17:08:54 2012 +0900
@@ -29,7 +29,7 @@
 
 ABIBIT = 64
 
-OPT = -g -O0 -DMAIL_QUEUE -DNOT_CHECK #-DTASK_LIST_MAIL #-DEARLY_TOUCH -DUSE_CACHE
+OPT = -g -DMAIL_QUEUE -DNOT_CHECK #-DTASK_LIST_MAIL #-DEARLY_TOUCH -DUSE_CACHE
 #OPT = -O9 -DMAIL_QUEUE -DNOT_CHECK #-DTASK_LIST_MAIL #-DEARLY_TOUCH -DUSE_CACHE