在阅读 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
中,矩阵中的前三个对角线乘以一个因子。根据我对单位矩阵的有限知识,这似乎是按比例缩放的。
然而,第二个转换,我不太明白:
mat[12]=-(xmin+w/2);
mat[13]=-(ymin+h/2);
glMultMatrixf ( mat );
首先,我什至不知道更改索引12
和13
在这样的矩阵中意味着什么。我试图通过阅读关于转换的维基百科页面来弄清楚它,但我想我没有足够的数学相关领域知识来理解它。
而我能找到的 OpenGL 资源似乎并没有真正以这种方式修改矩阵,而是使用glScaleF
.
如何将上述手动矩阵变换与缩放、剪切、平移和旋转联系起来?