zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    python 求取代码运行时间
    Python中的继承、抽象基类和接口
    Python安装和环境配置,让你轻松入门学习Python!
    python入门python的基本语法
    没有对象?程序员的浪漫,对象攻略(1)
    python实现邮件循环自动发件
    docker查看全部容器命令
    python speech模块的使用方法
    开宗立派宣言
    多个 (li) 标签如何获取获取选中的里面的某个特定值
  • 原文地址:https://www.cnblogs.com/icmzn/p/5049466.html
Copyright © 2011-2022 走看看