2008年10月26日日曜日

Colladaファイルの注意点

OpenGLは

float* m[16]={・・・略・・・};
glBegin(GL_POINTS);
glMultMatrixf(m);
glVertexf(x,y,z,1)
glEnd();

上記のコードではこんな行列計算をしている。
(m[0] m[4] m[8] m[12]) (x)
(m[1] m[5] m[9] m[13]) (y)
(m[2] m[6] m[10] m[14]) (z)
(m[3] m[7] m[11] m[15]) (1)

つまり、m[12],m[13],m[14]が平行移動の成分になる。


一方Colladaのファイル内は
m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m12 m13 m14 m15
のように書かれている。これが意味する行列計算は

(m0 m1 m2 m3 ) (x)
(m4 m5 m6 m7 ) (y)
(m8 m9 m10 m11) (z)
(m12 m13 m14 m15) (1)

つまり、m3,m7,m11が平行移動の成分となる。
OpenGLで使うときは、転置して保存してやる必要がある。

0 件のコメント: