UCMerced の TriPath Toolkit からいくつかのコードを読んでいるときに、これらに出くわしました
float xmin, xmax, ymin, ymax;
float mat[16] = { 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1 };
TheLct->get_bounds ( xmin, xmax, ymin, ymax );
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity ();
float width = xmax-xmin;
float height = ymax-ymin;
mat[0]=mat[5]=mat[10]= 1.8f * (1 / (width > height ? width : height));
glMultMatrixf ( mat );
mat[0]=mat[5]=mat[10]= 1;
mat[12]=-(xmin+w/2);
mat[13]=-(ymin+h/2);
glMultMatrixf ( mat );
最初の変換では1
、行列の最初の 3 つの対角線が係数で乗算されます。恒等行列に関する私の限られた知識から、これは係数でスケーリングしているように見えます。
ただし、2 番目の変換については、よくわかりません。
mat[12]=-(xmin+w/2);
mat[13]=-(ymin+h/2);
glMultMatrixf ( mat );
まず第一に、インデックス12
や13
そのようなマトリックスを変更することさえ何を意味するのかわかりません。変換に関するウィキペディアのページを読んで理解しようとしていますが、それを理解するのに十分な数学関連のドメイン知識がないと思います。
私が見つけることができる OpenGL リソースは、実際にはこの方法で行列を変更するようには見えませんが、glScaleF
.
上記のような手動の行列変換をスケーリング、せん断、平行移動、回転に関連付けるにはどうすればよいですか?