OpenGL中的矩阵相乘

OpenGL中的矩阵相乘

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].
举个例子:

1 glMatrixMode(GL_MODELVIEW);
2 glLoadIdentity();
3 glMultMatrixf(M);           //glScale*();
4 glMultMatrixf(N);           //glRotate*()
5 glMultMatrixf(L);           //glTranslate*();
6 glBegin(GL_POINTS);
7 glVertex3f(V);
8 glEnd();

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

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

  Mp:投影矩阵;

  Ms:后续变换的矩阵;

  V:物体模型矩阵;

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

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

参考网址:
http://blog.csdn.net/dizuo/article/details/2325279

转载于:https://www.cnblogs.com/icmzn/p/5049466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值