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

 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, .); //创建投影矩阵Mp;
glMultMatrixf(Ms);

  Mp:投影矩阵;

  Ms:后续变换的矩阵;

  V:物体模型矩阵;

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

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

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

最新文章

  1. PHP 动态生成验证码
  2. datagridview的数据存取
  3. 搭建angular前端框架 命令
  4. 重写js alert
  5. UML: 对象图
  6. How to Release the Temp LOB Space and Avoid Hitting ORA-1652 (文档 ID 802897.1)
  7. Linux五种IO模型性能分析
  8. yii2 入口文件 提示syntax error, unexpected T_OBJECT_OPERATOR
  9. Linux之数据库操作
  10. JavaWeb三大组件
  11. Java 获取图片的大小、宽、高
  12. php输出json的内容
  13. 基于Redis的CAS集群
  14. SQL Server 2000中的并行处理和执行计划中的位图运算符
  15. PgSql备份pg_dump与还原手记pg_restore
  16. P2260 [清华集训2012]模积和
  17. QT之QML控件篇
  18. 一起来做Chrome Extension《一些问题》
  19. delphi IOS 后台状态保存
  20. mysql 允许远程IP连接, 并查看所有用户的所有权限

热门文章

  1. 2017.1.9版给信息源新增:max_len、max_db字段
  2. fiddler无法抓取chrome解决方法
  3. prototype & __proto__
  4. 工作流和过程自动化框架 Camunda BPM
  5. golang获取IP地址
  6. 使用css实现特殊标志或图形
  7. SweetAlert2 弹窗
  8. maven的配置及仓库的配置
  9. 转:从框架看PHP的五种境界及各自的薪资待遇(仅限于二三线城市,一线除外)
  10. 766A Mahmoud and Longest Uncommon Subsequence