Mercurial > hg > Game > Cerium
diff TaskManager/Test/test_render/sys.cpp @ 219:335ea3665fcd draft
allExecute する度に SceneGraph をコピーしていく様に変更
author | gongo@gendarme.local |
---|---|
date | Mon, 09 Feb 2009 00:12:40 +0900 |
parents | 59f4129a9562 |
children | 305ac1897c50 |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/sys.cpp Wed Feb 04 22:54:14 2009 +0900 +++ b/TaskManager/Test/test_render/sys.cpp Mon Feb 09 00:12:40 2009 +0900 @@ -10,6 +10,62 @@ exit(1); } +void +transMatrix(float *m0, float *m1, float *v) +{ + memcpy(m0, m1, sizeof(float)*16); + + m0[12] = m1[12] + v[0]; + m0[13] = m1[13] + v[1]; + m0[14] = m1[14] + v[2]; + m0[15] = m1[15] + v[3]; +} + +void +unitMatrix(float *m) +{ + bzero(m, sizeof(float)*16); + + m[0] = 1.0f; + m[5] = 1.0f; + m[10] = 1.0f; + m[15] = 1.0f; +} + +void +inversMatrix(float *m0, float *m1) +{ + float m[16]; + + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 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; + + memcpy(m0, m, sizeof(float)*16); +} + +/** + * マトリックス m にベクトル v1 を右から乗算して、v0に与える + * @param[out] v0 output vector (float[4]) + * @param[in] v1 input vector (float[4]) + * @param[in] m matrix (float[16]) + */ +void +applyMatrix(float *v0, float *m, float *v1) +{ + for (int i = 0; i < 4; i++) { + v0[i] = v1[0]*m[i] + v1[1]*m[i+4] + v1[2]*m[i+8] + v1[3]*m[i+12]; + } +} + /** * ベクトルの正規化 * @@ -55,6 +111,20 @@ v0[3] = 0; } +void +transposeMatrix(float *m0, float *m1) +{ + float t[16]; + + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + t[i*4+j] = m1[j*4+i]; + } + } + + memcpy(m0, t, sizeof(float)*16); +} + /** * ベクトルの内積 f = v0 * v1 */