Mercurial > hg > Game > Cerium
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