OpenGL中的矩阵相乘的顺序

转载 2012年03月27日 09:14:24

原文来自:

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;

相关文章推荐

OpenGL 矩阵变换(讲的太好了~!)

Overview 几何数据——顶点位置,和标准向量(normal vectors),在OpenGL 管道raterization 处理过程之前可通过顶点操作(Vertex Operation)和基本...

数据结构 矩阵的快速转置 矩阵相乘(行逻辑连接顺序表)

快速转置 #include #include using namespace std; class num { public: int x,y; int e; i...

openGL 各种坐标矩阵变换

  • 2013-04-01 12:35
  • 67KB
  • 下载

OpenGL变换顺序的理解

该文转自百度空间Rocky的避风港,原文链接: http://hi.baidu.com/rocky_ly/item/21225b271a3f4d14087508c2 关于变换操作顺序的...

OpenGL ES中的变化矩阵

OpenGL ES中的变化矩阵注: 数学上,向量表示可以有两种选择:行向量与列向量。 这两种方式没有本质区别,选取哪种都可以,OpenGL ES中使用的是列向量。列向量和矩阵相乘实现变换时,只能在...

OpenGL ES 矩阵旋转

1、修改 Draw.java 新增方法 /* * 画点 */ public static void drawPoint(GL10 gl ,float []pos,float size){ ...

OpenGL基本概念入门3——矩阵变换

1 平移glTranslatef(x,y,z);    其中,x,y,z分别表示在X、Y、Z轴上平移的量2 旋转与平移类似,OpenGL也为我们提供了一个高级函数用于旋转物体:glRotatef(An...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)