参考内容:
1. 这次,彻底搞懂 OpenGL 矩阵转换
2. Article - World, View and Projection Transformation Matrices

模型变换的基本流程图:

1. 模型变换

模型变换解决的是,把物体在世界坐标系下的位置拆分成平移、缩放、旋转的表达方式。

1. 平移矩阵

2. 缩放矩阵

3. 旋转矩阵
下图依次为分别绕X、Y、Z轴的旋转矩阵:

2. 视图变换

视图变换的作用可以理解为,指定一个照相机的位置和角度,然后去观察世界坐标系下的物体。

上图中左半部分,是将摄像机放进世界坐标系,右半部分则是将世界坐标内的所有Object变换到视图空间(又称摄像机空间)。

3. 投影变换

投影变换是把前面在三维空间中的坐标投影到二维屏幕坐标,但是计算结果也是一个三维坐标(严格来说是四维的,还有个齐次的 1),除了屏幕的横纵坐标之外,另一个维度就是垂直屏幕方向上的深度坐标,就是之后可以写入深度缓冲器的值。
1. 正交投影
为了确定摄像机所能观察到的范围,需要在X、Y轴上定义width值和height值,并在Z上分别定义near z值和far z值。

2. 透视投影
透视投影相对于正交投影多了一个fov量,即视角。

4. 视口变换

视口变换,这里只是一个非常简单的 X-Y 平面上的缩放,它决定了最终渲染到屏幕上的哪一块区域。

5. 变换结果

变换后的坐标 = 视口矩阵 x 投影矩阵 x 视图矩阵 x 模型矩阵 x 模型点坐标
其中模型点坐标和变换后的坐标是 1x4 的向量,其他矩阵都是 4x4 的。
规定:OpenGL的向量为列向量,矩阵和向量采用的方式又是“矩阵X列向量”的方式,当多个矩阵乘以向量时,应该从右向左计算。故上式的计算顺序为模型点坐标先与模型矩阵相乘,再与视图矩阵相乘,投影矩阵视口矩阵,最后得到变换后的坐标

$. 补充内容

  1. OpenGL中的顶点一般用齐次坐标表示,且以列向量的形式呈现,矩阵变换采用的方式即为“矩阵x列向量”的方式。
  2. 旋转时的方向

OpenGL遵循右手坐标系,即有:

X轴正方向 Y轴正方向 Z轴正方向
沿屏幕向右 沿屏幕向里 沿屏幕向上

空间姿态:

NULL 俯仰角(Pitch) 翻滚角(Roll) 偏航角(Heading)
0位置: Y轴正向 X轴正向 Y轴正向
方向: 从X轴正向看去逆为正 从Y轴正向看去逆为正 从Z轴正向看去逆为正

3. 旋转矩阵的求解方法
下面以绕X轴旋转为例,当模型顶点(x, y, z, w)绕X轴旋转时,有y1 = y × × \times cos cos \cos θ θ \theta - z × × \times sin sin \sin θ θ \theta。下面为求解过程:

绕X轴旋转时,x值不变,故可将三维问题投影到Y-Z平面进行计算,如上图示点(y, z)旋转 θ θ \theta到达点(y1, z1),推到过程如下所示:

4. 透视图画法

OpenGL矩阵变换相关推荐

  1. OpenGL 矩阵变换

    origin refer :http://www.songho.ca/opengl/gl_transform.html#modelview OpenGL 矩阵变换 Related Topics: Op ...

  2. opengl矩阵变换与平移缩放旋转

    2019独角兽企业重金招聘Python工程师标准>>> 坐标系: 1.右手坐标系 2.左手坐标系 左手坐标系是X轴向右,Y轴向上,Z轴向前,右手坐标系的Z轴正好相反,是指向" ...

  3. OpenGL之矩阵变换的原理分析与数学推导

    什么是矩阵变换? 这张图比较直观地展示了OpenGL矩阵变换的过程,下面详解一下其中的含义: 首先OpenGL有个世界坐标系,我们渲染的物体就是在世界坐标系中,模型需要放到世界坐标系中,那么当还没放的 ...

  4. Opengl ES之PBO

    叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了,然而这个系列还远没有到完毕地步,后续至少还有关于Opengl矩阵变换.YUV与RGB互转.Opengl水印贴图.Opengl转场动画 ...

  5. 《视觉开发专题》之 OpenGL 3D动画绘制图形学概念的理解

    知识前导 计算机图形学的终极目标--讨好人类视觉系统   最近在啃的书中有一本叫<计算机图形学 原理及实践>,这本书让我深有感触的是其绪论中对计算机构建真实感图像的理解:我们所致力的最终目 ...

  6. WebGL简易教程(五):图形变换(模型、视图、投影变换)

    文章目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 ...

  7. WebGl 球面计算公式

    概要 以下所涉及到的数学模型包括: WebGl 的球体模型构建 WebGl 场景交互时视角变换的方法 WebGl 中 3D 空间的点在二维平面上的投影 360 度播放器的视频流的处理 以上是全景播放器 ...

  8. unity-shader相关

    title: unity-shader相关 categories: Unity3d-Shader tags: [unity, shader] date: 2017-09-12 10:05:18 com ...

  9. 图形学opengl实验二-桌子的矩阵变换

    在OpenGL编程基础上,通过实现实验内容,掌握OpenGL的矩阵使用,并验证课程中矩阵变换的内容: #include <GL/glut.h> float size = 0.25; //缩 ...

最新文章

  1. 昇思MindSpore1.6发布 AI开发者体验再升级
  2. pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区
  3. 【C++】运算符重载 Operator Overload
  4. `>>`(有符号右移) 和 `>>>`(无符号右移)的区别
  5. [转]如何进行单元测试
  6. 1.10 编程基础之简单排序 03 成绩排序 3分 python
  7. 第一 二章 计算机基础知识,[精品]第二章-计算机基础知识.doc
  8. java--线程安全
  9. zabbix 时间错误_监控的朋友看过来,官方社区专家开源的Zabbix报表系统
  10. storage相关网站
  11. 【ECG实践篇(1)】MIT-BIH数据库数据解析的方法以及使用rdann获取人工标注注释的方法
  12. 学校计算机维护投标书,信息化系统硬件及应用系统安全运维服务投标书范本
  13. 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第9章 阿里巴巴数据整合及管理体系
  14. 推荐 15个 React 图标库
  15. Redisson延迟队列
  16. 苹果截屏快捷键_Mac进阶:掌握这 5 个冷门快捷键,让Mac更好用
  17. Java:冒泡排序法
  18. linux查看某个文件大小
  19. 【操作系统概念-作业1】Introduction
  20. c语言鼠标打地鼠程序,如何使用C语言实现打地鼠的游戏

热门文章

  1. (转)塔吉特读心术——用户数据分析的魔力
  2. linux nfs 协议,Linux 以 NFS 协议挂载 ReadyNAS 共享区
  3. 设计人生的时刻表[转帖]
  4. HTML5背景图片的插入、修改及其相关的特点
  5. 女神节 | 那些奋斗在 IT 领域的“女神”们
  6. Socket编写一个HTTP server程序(源码+运行效果)
  7. 【转】安卓苹果ios抓包工具storm sniffer推荐教程
  8. 什么是<tr> 标签?
  9. java怎么完成输出语句
  10. 不靠明星的淘宝直播,如何靠UPGC内容创收视奇迹