OpenGL: 矩阵相乘的顺序
来源:互联网 发布:淘宝网电脑主板 编辑:程序博客网 时间:2024/05/22 02:04
原文地址: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
- OpenGL: 矩阵相乘的顺序
- OpenGL: 矩阵相乘的顺序
- OpenGL: 矩阵相乘的顺序
- OpenGL中的矩阵相乘的顺序
- OpenGL中的矩阵相乘的顺序
- openGL中矩阵相乘的顺序
- OpenGL中的矩阵相乘的顺序 (转)
- 矩阵相乘的最优顺序
- D3D、OpenGL顶点和矩阵的相乘和存储:
- 矩阵相乘的算法
- 矩阵相乘的算法
- 矩阵的相乘
- 矩阵相乘的优化
- 矩阵的逐个相乘
- 矩阵相乘的本质
- 数据结构 矩阵的快速转置 矩阵相乘(行逻辑连接顺序表)
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- Spring AOP 的实现
- block的理解与 MRC,ARC下内存管理
- 控制文件丢失后,进行数据库恢复的过程
- 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决
- 阅读《Android 从入门到精通》(9)——多项选择
- OpenGL: 矩阵相乘的顺序
- 数据库
- 基于B-树的图书管理系统课程设计
- 让程序在崩溃时体面的退出之SEH
- [JZOJ3248] Type
- MapReduce 图解流程超详细解答(1)-【map阶段】
- POJ 1005_I Think I Need a Houseboat
- Java中HashMap和TreeMap的区别深入理解
- 【学习笔记】《STL使用入门教程》第三讲:容器deque与list