5.3 线性代数基础(Linear Algebra 101)

在OpenGL中向量和矩阵用的非常多,其中一个非常重要的应用就是设置正交投影和透视投影。使用矩阵进行投影你只需要做一些矩阵的加法与乘法,而且现代GPU是非常善于做这类工作。
    现在让我们简单回忆下相关的一些基础,假如你不记得了、记性不好或者压根没有学过相关课程,那也不用担心;这里将会学习一些矩阵基础计算,一旦你理解了这些知识,我们将学习如何使用矩阵实现正交投影。

5.3.1 向量(Vectors)

向量就是一个一维数组,在OpenGL中,一个顶点的位置就是一个含四元素的向量,颜色也是一个向量。我们使用的大部分向量都包含四个元素,比如下面的例子,它就是一个包含x y z w四个元素的位置向量。


    其中的w分量将在会后面有详细说明。

5.3.2 矩阵(Matrices)

矩阵是一个二维数组,在OpenGL中,我们通常是使用矩阵对向量进行正交或者透视投影,也可以用于对一个物体进行旋转、平移及缩放,要实现这些操作,我们只需要把矩阵与相应向量进行相乘即可。
    下面是一个矩阵的例子,在矩阵与向量相乘的情况下,元素下标将会很有意义。

5.3.3 矩阵向量相乘(Matrix-Vector Multiplication)

当矩阵与向量相乘的时候,我们把矩阵放在左边而向量放在右边,然后从矩阵的第一行开始,把第一行的第一个元素与向量的第一个元素进行相乘,第一行的第二个元素与向量的第二个元素进行相乘,这样一直到第一行的最后一个元素与向量的最后一个元素进行相乘,然后把上面针对第一行相乘的所有结果加起来得到一个和,这个和就是结果向量的第一个元素。
    下面是一个完整的矩阵向量相乘的例子:

  
    正如上面所描述,第一行与向量相乘得到结果向量的第一个元素,第二行与向量相乘得到结果向量的第二个元素,这样一直进行到最后一行得到最后一个结果向量元素。
    通过这个例子,可以看出元素下标在进行相乘时的直观意义,第一行的四个元素将会影响结果向量值x,第二行的四个元素将会影响结果向量值y,依次类推。在每一行内,第一个元素与向量的x相乘,第二个元素与y相乘,依次类推。

5.3.4 单位矩阵(The Identity Matrix)

现在我们来看一个实际的例子,我们将从单位矩阵开始,一个单位矩阵就像下面图示一样:


    为什么这个矩阵叫做单位矩阵呢?这是因为当我们使用这个矩阵与任何向量相乘的时候结果都还是原向量,就像我们使用任何数与1相乘一样。
    下面是一个使用单位矩阵与包含元素1、2、3、4的向量进行相乘的一个例子:

  
    对于第一行,把向量的第一个元素与1相乘,向量的其它元素与0相乘;对于第二行,把向量的第二个元素与1相乘,其它元素与0相乘,依次类推;最终得到的结果向量与原向量相同。
    现在化简上面的乘法并把结果相加,将会得到如下结果向量:


5.3.5 使用矩阵进行平移(Translations Using a Matrix)

现在我们已经理解了单位矩阵,现在来看看在OpenGL中使用得比较多的一个能进行平移的简单矩阵,使用这个矩阵我们可以让物体在指定的方向上平移一定的距离。这个矩阵看起来就像单独矩阵一样,不过在最后一列多了三个元素,如下图所示:


    现在来看一个简单例子,比如位置(2, 2, 0, 1),我们想把这个向量在x轴上平移3个单位,在y轴上平移3个单位,因此分别设置相关变量为3,如下图所示:

  
    化简后得到如下:


    最后把结果相关,最终位置如下:


    现在的位置是(5, 5, 0, 1),正如我们想象的一样。
    得到这个结果也很好理解,因为这里的平移矩阵来源于单位矩阵,因此相乘后首先会得到原来的矩阵,又因为平移分量也w相乘,w又是1(如果我们不设置w分量,OpenGL则会默认设置为1),结果就是简单的相加。
    w分量在这里的作用相当重要,在下一章中我们将会学习透视投影,在透视投影后一个坐标的w分量就可能不是1了,这个时候假如我们使用这个不是1的w分量进行平移或者其它操作,那我们将会遇到麻烦,操作的结果将不会如你想象。

现在我们学习的矩阵知识足够定义正交投影了,下一节我们将进行正交投影的定义。

Part I 空气曲棍球 Chapter5 (5.3 Linear Algebra 101)相关推荐

  1. Part I 空气曲棍球 Chapter5 (5.1 We Have an Aspect Ratio Problem)

    5.1 屏幕比例问题(We Have an Aspect Ratio Problem) 现在我们知道在OpenGL里面所有渲染的东西在x轴及y轴上都限制在[-1,+1]范围内,z轴上也存在同样的限制. ...

  2. Part I 空气曲棍球 Chapter5(5.5 Adding an Orthographic Projection)

    5.5 增加正侧投影(Adding an Orthographic Projection) 现在我们可以在项目中添加正交投影并且修复桌面压缩的问题了. 5.5.1 更新着色器(Updating the ...

  3. Part I 空气曲棍球 Chapter5(5.4 Defining an Orthographic Projection)

    5.4 定义正侧投影(Defining an Orthographic Projection) 我们使用包android.opengl 下面的Matrix类定义一个正侧投影,在Matrix中有一个方法 ...

  4. 空气曲棍球 由哪几部分组成_Excel中的曲棍球运动员数据分析

    空气曲棍球 由哪几部分组成 Congratulations to the USA Women's Hockey team, who won the Olympic gold medal. They b ...

  5. 《OpenGL ES应用开发实践指南:Android卷》—— 2.1 为什么选择空气曲棍球

    本节书摘来自华章出版社<OpenGL ES应用开发实践指南:Android卷>一 书中的第2章,第2.1节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区&qu ...

  6. Part I 空气曲棍球 Chapter8(Building Simple Objects)

    我们的空气曲棍球项目已经捣鼓好久了,现在绘制出来的桌面也是呈现出了一个好视角并且配合纹理映射后看起来更好了:然而由于球棍只是一个点所以看起来并不像真正的球棍,你能想象下使用像一个点一样的球棍打球会是什 ...

  7. 《OpenGL ES应用开发实践指南:Android卷》—— 2.3 定义空气曲棍球桌子的结构...

    本节书摘来自华章出版社<OpenGL ES应用开发实践指南:Android卷>一 书中的第2章,第2.3节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区&qu ...

  8. Part I 空气曲棍球 Chapter9(Adding Touch Feedback)

    通过支持触控反馈获得好的用户交互体验是很多应用和游戏的基石,这样会让用户觉得他们能真正使用一些真实的东西,即使用户只是对着空白的屏幕也是如此.一些手机游戏之所以非常流行只是因为增加了一些触控而已:此时 ...

  9. Part I A Simple game of air hockey(空气曲棍球)-Chapter2 Defining Vertices and Shaders

    上一章节简单介绍了OpenGL ES 2.0开发的简单入门知识,实际上你学没有真正进入OpenGL ES 2.0的世界,从这一章开始将会一步步的带着你开始你的OpenGL ES 2.0实战之旅,这里最 ...

最新文章

  1. Android开发--图形图像与动画(二)--Animation实现图像的 渐变、缩放、位移、旋转
  2. 如何配置原材料的默认采购类型为F
  3. git服务器与客户端的安装与使用
  4. 个性化资源管理器软件Q-dir_6.36(附安装包)
  5. 2016美国计算机研究生,2016美国留学:美国大学研究生计算机工程专业排名
  6. mmdetection 使用笔记 01: 安装与简单的推理demo
  7. Hugging Face Course-Diving in 抱抱脸 Tokenizers library (WordPiece tokenization Unigram tokenization)
  8. oracle excel总结,oracle导出excel 步骤总结
  9. 【微信小程序 | 实战开发】开发环境、测试环境和生产环境
  10. 软件人员kpi制定模板_软件开发人员月度KPI考核指标
  11. 尚硅谷YYDS (视频连接)
  12. 纪念日或者悼念日 网站改为灰白模式
  13. 五分钟实现 pdf 分页
  14. dw中html文档命名标准,dw中的css是什么意思?
  15. mysql8.0.20 64位安装教程_windows 64位下MySQL 8.0.15安装教程图文详解
  16. 多表操作-外键级联操作
  17. 邵雍·《渔樵问对》译文和原文
  18. 鸭子模型_如果它看起来像鸭子,嘎嘎像鸭子,但需要电池-您的抽象错误
  19. [bzoj5314][Jsoi2018]潜入行动_树形背包dp
  20. 破解所谓的ISP封路由的方法大集合

热门文章

  1. Android Studio IDE安装指南
  2. 嵌入式接口技术(一)GPIO
  3. 临床医生眼中的五大高压科室,你入选了吗
  4. fidder使用教程(一)
  5. error C2633: “Hello”: “inline”是构造函数的唯一合法存储类
  6. How to do presentation
  7. Flutter 实现闲鱼凸起栏
  8. 采购订单的审批制作完整版
  9. docker下hitchhiker安装
  10. win10 vscode搭建go语言开发环境