关闭

OpenGL中的矩阵相乘的顺序

2092人阅读 评论(0) 收藏 举报
分类:

原文来自:

http://blog.csdn.net/dizuo/article/details/2325279

1,在OpenGL中所有的视图变换,模型变换 都是4×4矩阵,每个后续的glMultiMatrix*(N),或者变换函数,glTranslate*(),glRotate*(),等都是把一个新的4×4矩阵与当前的矩阵M相乘,不同的是:变换函数glTranslate*(),glRotate*()等会根据函数参数构造一个4×4矩阵,也设为N,两种情况产生相同的结果:M×N。注意这里的顺序,后续的矩阵是右乘当前矩阵。


2,因为在opengl中坐标表示形式是:[x,y,z]T(表示转置),或者齐次坐标下:[x,y,z,w]T标准化后[x/w,y/w,z/w,1.0]T 这就决定了矩阵也是列优先表示的。将上面的两个矩阵作用于点V,则表示为:M×N×V;满足矩阵相乘的条件:[4×4 ] * [4×1].
举个例子:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(M);           //glScale*();
glMultMatrixf(N);           //glRotate*()
glMultMatrixf(L);           //glTranslate*();
glBegin(GL_POINTS);
glVertex3f(V);
glEnd();

    按照上面的语句,经过变换的顶点是:M×N×L×V, 始终是右乘.
注意下面的例子:

glMatrixMode(L_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, 1.0, 1.0, 20.);   //创建投影矩阵Mp;
glMultMatrixf(Ms);

    产生的结果是:Mp×Ms×V(顶点);
    但是如果你想要结果是:Ms×Mp×V(顶点);代码是:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMultMatrixf(Ms);
gluPerspective(45.0, 1.0, 1.0, 20.);   //创建投影矩阵Mp;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:213752次
    • 积分:2346
    • 等级:
    • 排名:第15966名
    • 原创:44篇
    • 转载:46篇
    • 译文:0篇
    • 评论:34条
    最新评论