Mercurial > hg > Game > Cerium
changeset 1254:34944900f266 draft
minor fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Nov 2011 16:56:11 +0900 |
parents | 7ee76065ec12 |
children | 39016616cc26 |
files | Renderer/Engine/Camera.cc Renderer/Engine/ChangeLog Renderer/Engine/SceneGraph.cc Renderer/Engine/SceneGraphRoot.cc Renderer/Engine/SceneGraphRoot.h Renderer/Engine/matrix_calc.cc Renderer/Engine/viewer.cc |
diffstat | 7 files changed, 106 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/Renderer/Engine/Camera.cc Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/Camera.cc Fri Nov 18 16:56:11 2011 +0900 @@ -176,9 +176,9 @@ float cx[4], cy[4], cz[4], p[4]; float tm[16]; - radx = angle[0]*3.14/180; - rady = angle[1]*3.14/180; - radz = angle[2]*3.14/180; + radx = angle[0]*M_PI/180; + rady = angle[1]*M_PI/180; + radz = angle[2]*M_PI/180; float sinx = sin(radx); float cosx = cos(radx);
--- a/Renderer/Engine/ChangeLog Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/ChangeLog Fri Nov 18 16:56:11 2011 +0900 @@ -1,3 +1,14 @@ +2011-9-7 Shinji Kono <kono@ie.u-ryukyu.ac.jp> + + allExecute 使わない方の Camera の処理をしないとだめ。 + + Camera のbrother ===> sprite + Camera のchildren ===> sceneGraph + + じゃないの? Camera に座標と行列をcopyする必要があると思われる。 + + matrix/real_matrix は重複っぽい。そもそも、なんで別なんだ? 普通は同じ値? + 2011-2-14 Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> CreatePolygonFromScenenGraph を SPEで動くようにTask化。もうできるのはわかっているけど @@ -25,16 +36,16 @@ 2009-12-19 Shinji Kono <kono@ie.u-ryukyu.ac.jp> SgChange/viewer は大域変数使いすぎ。禁止って言ったのに。 - linda api は、federated linda 対応でないものが使われている。 - 対応したものは、どこにあるんだろう? + linda api は、federated linda 対応でないものが使われている。 + 対応したものは、どこにあるんだろう? - 他の例題いじるのは、自分の例題を動かしてからにして欲しい。 + 他の例題いじるのは、自分の例題を動かしてからにして欲しい。 - まぁねぇ。Pipeline execution するのに、sgpack とかも Pipeline buffer - にするのは気づかないものなんだろうな... なくても、動かないことは - ないのか。 + まぁねぇ。Pipeline execution するのに、sgpack とかも Pipeline buffer + にするのは気づかないものなんだろうな... なくても、動かないことは + ないのか。 - viewer.cc の大域変数を落すところから始めるべきか? + viewer.cc の大域変数を落すところから始めるべきか? 2009-11-15 Shinji Kono <kono@ie.u-ryukyu.ac.jp> @@ -80,7 +91,7 @@ --------------------------------------- data = | vertex | normal | texture | sizeof(data) = size*3 --------------------------------------- - \ size / \ size / \ size / + \ size / \ size / \ size / てな感じで、SceneGraph->data の中に 3 つ入ってたわけです。 これだと、アクセスする時にどれがどれかわからんくなるし、
--- a/Renderer/Engine/SceneGraph.cc Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/SceneGraph.cc Fri Nov 18 16:56:11 2011 +0900 @@ -135,6 +135,10 @@ matrix[i] = 0; real_matrix[i] = 0; } + for (int i = 0; i < 4; i++) { + matrix[i*4+i] = 1; + real_matrix[i*4+i] = 1; + } finalize = &SceneGraph::finalize_copy;
--- a/Renderer/Engine/SceneGraphRoot.cc Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/SceneGraphRoot.cc Fri Nov 18 16:56:11 2011 +0900 @@ -172,7 +172,7 @@ width_shift += text->seq; root->addChild(text); get_matrix_scale(text->matrix, text->angle, text->xyz, scale, root->matrix); - get_matrix(text->real_matrix, text->angle, text->xyz, root->real_matrix); + // get_matrix(text->real_matrix, text->angle, text->xyz, root->real_matrix); i += len; } } @@ -478,7 +478,7 @@ /*親の回転、座標から、子の回転、座標を算出*/ get_matrix(c->matrix, c->angle, c->xyz, cur_parent->matrix); /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ - get_matrix(c->real_matrix, c->angle, c->xyz, cur_parent->real_matrix); + // get_matrix(c->real_matrix, c->angle, c->xyz, cur_parent->real_matrix); //get_matrix(c->real_matrix, c->angle, c->xyz, camera->real_matrix); } @@ -508,6 +508,15 @@ } + +void +SceneGraphRoot::void treeApply(int screen_w, int screen_h) +{ + // don't calcurate sg_draw_tree's brother + transTree(sg_draw_tree->children, camera); +} + + /** * 破壊的に変換行列の親子関係を計算する */ @@ -523,7 +532,7 @@ /*親の回転、座標から、子の回転、座標を算出*/ matrix4x4(t->matrix,t->matrix,cur_parent->matrix); /*法線用の行列。Cameraの行列を抜いている(Cameraのコンストラクタで、単位行列にしている)*/ - matrix4x4(t->real_matrix,t->real_matrix,cur_parent->real_matrix); + // matrix4x4(t->real_matrix,t->real_matrix,cur_parent->real_matrix); } if (t->children != NULL && c != NULL) {
--- a/Renderer/Engine/SceneGraphRoot.h Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/SceneGraphRoot.h Fri Nov 18 16:56:11 2011 +0900 @@ -124,6 +124,7 @@ /* Other System API */ void allExecute(int screen_w, int screen_h); + void treeApply(int screen_w, int screen_h); void lightCalc(); void flip(); void copyTree(SceneGraphPtr from, SceneGraphPtr to);
--- a/Renderer/Engine/matrix_calc.cc Wed Nov 16 12:39:07 2011 +0900 +++ b/Renderer/Engine/matrix_calc.cc Fri Nov 18 16:56:11 2011 +0900 @@ -5,12 +5,6 @@ #include "matrix_calc.h" using namespace std; -void noMoreMemory() -{ - cout << "can't allocate memory\n"; - exit(1); -} - void transMatrix(float *m0, float *m1, float *v) { @@ -40,17 +34,16 @@ for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { - m[i*4+j] = m1[j*4+i]; + m0[i*4+j] = m[i*4+j] = m1[j*4+i]; } } - m[12] = -(m1[12]*m[0] + m1[13]*m[1] + m1[14]*m[2]); - m[13] = -(m1[12]*m[4] + m1[13]*m[5] + m1[14]*m[6]); - m[14] = -(m1[12]*m[8] + m1[13]*m[9] + m1[14]*m[10]); - m[3] = m[7] = m[11] = 0.0f; - m[15] = 1.0f; + m0[12] = -(m1[12]*m[0] + m1[13]*m[1] + m1[14]*m[2]); + m0[13] = -(m1[12]*m[4] + m1[13]*m[5] + m1[14]*m[6]); + m0[14] = -(m1[12]*m[8] + m1[13]*m[9] + m1[14]*m[10]); + m0[3] = m0[7] = m0[11] = 0.0f; + m0[15] = 1.0f; - memcpy(m0, m, sizeof(float)*16); } /** @@ -67,6 +60,7 @@ } } + /** * ベクトルの正規化 * @@ -117,13 +111,14 @@ { float t[16]; + // こういう小細工よりベクタ使った方が良いんだが for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { + for (int j = i+1; j < 4; j++) { + float tmp = t[j*4+i]; t[i*4+j] = m1[j*4+i]; + m1[j*4+i] = tmp; } } - - memcpy(m0, t, sizeof(float)*16); } /** @@ -149,6 +144,17 @@ } } +void matrix4x4R(float &xyz[16], float &xyz1[16], float &xyz2[16]) +{ + for(int t=0; t<16; t+=4) + { + for(int i=0; i<4; i++) + { + xyz[t+i] = xyz1[t]*xyz2[i] + xyz1[t+1]*xyz2[4+i] + xyz1[t+2]*xyz2[8+i] + xyz1[t+3]*xyz2[12+i]; + } + } +} + /** * c_xyz を中心に sacle 倍する */ @@ -185,9 +191,9 @@ get_matrix( float *matrix, float *rxyz, float *txyz, float *stack) { float radx,rady,radz; - radx = rxyz[0]*3.141562/180; - rady = rxyz[1]*3.141562/180; - radz = rxyz[2]*3.141562/180; + radx = rxyz[0]*M_PI/180; + rady = rxyz[1]*M_PI/180; + radz = rxyz[2]*M_PI/180; float sinx = sin(radx); float cosx = cos(radx); @@ -228,9 +234,9 @@ get_matrix_scale( float *matrix, float *rxyz, float *txyz, float *scale, float *stack) { float radx,rady,radz; - radx = rxyz[0]*3.14/180; - rady = rxyz[1]*3.14/180; - radz = rxyz[2]*3.14/180; + radx = rxyz[0]*M_PI/180; + rady = rxyz[1]*M_PI/180; + radz = rxyz[2]*M_PI/180; float sinx = sin(radx)*scale[0]; float cosx = cos(radx)*scale[0]; @@ -267,9 +273,43 @@ } +void +rotate_matrix( float &m[16], float &rxyz[4] ) +{ + float radx,rady,radz; + radx = rxyz[0]*M_PI/180; + rady = rxyz[1]*M_PI/180; + radz = rxyz[2]*M_PI/180; + + float sinx = sin(radx); + float cosx = cos(radx); + float siny = sin(rady); + float cosy = cos(rady); + float sinz = sin(radz); + float cosz = cos(radz); + + /* View Transform */ + m[0] = cosz*cosy+sinz*sinx*siny; + m[1] = sinz*cosx; + m[2] = -cosz*siny+sinz*sinx*cosy; + m[3] = 0; + m[4] = -sinz*cosy+cosz*sinx*siny; + m[5] = cosz*cosx; + m[6] = sinz*siny+cosz*sinx*cosy; + m[7] = 0; + m[8] = cosx*siny; + m[9] = -sinx; + m[10] = cosx*cosy; + m[11] = 0; + m[12] = 0; + m[13] = 0; + m[14] = 0; + m[15] = 1; +} + void rotate_x(float *xyz, float r) { - float rad = r*3.14/180; + float rad = r*M_PI/180; xyz[0] = xyz[0]; xyz[1] = xyz[1]*cos(rad) - xyz[2]*sin(rad); @@ -278,7 +318,7 @@ void rotate_y(float *xyz, float r) { - float rad = r*3.14/180; + float rad = r*M_PI/180; xyz[0] = xyz[0]*cos(rad) + xyz[2]*sin(rad); xyz[1] = xyz[1]; @@ -287,7 +327,7 @@ void rotate_z(float *xyz, float r) { - float rad = r*3.14/180; + float rad = r*M_PI/180; xyz[0] = xyz[0]*cos(rad) - xyz[1]*sin(rad); xyz[1] = xyz[0]*sin(rad) + xyz[1]*cos(rad);