OpenGL矩阵变换
参考内容:
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列向量”的方式,当多个矩阵乘以向量时,应该从右向左计算。故上式的计算顺序为模型点坐标先与模型矩阵相乘,再与视图矩阵相乘,投影矩阵和视口矩阵,最后得到变换后的坐标 。
$. 补充内容
- OpenGL中的顶点一般用齐次坐标表示,且以列向量的形式呈现,矩阵变换采用的方式即为“矩阵x列向量”的方式。
- 旋转时的方向
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矩阵变换相关推荐
- OpenGL 矩阵变换
origin refer :http://www.songho.ca/opengl/gl_transform.html#modelview OpenGL 矩阵变换 Related Topics: Op ...
- opengl矩阵变换与平移缩放旋转
2019独角兽企业重金招聘Python工程师标准>>> 坐标系: 1.右手坐标系 2.左手坐标系 左手坐标系是X轴向右,Y轴向上,Z轴向前,右手坐标系的Z轴正好相反,是指向" ...
- OpenGL之矩阵变换的原理分析与数学推导
什么是矩阵变换? 这张图比较直观地展示了OpenGL矩阵变换的过程,下面详解一下其中的含义: 首先OpenGL有个世界坐标系,我们渲染的物体就是在世界坐标系中,模型需要放到世界坐标系中,那么当还没放的 ...
- Opengl ES之PBO
叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了,然而这个系列还远没有到完毕地步,后续至少还有关于Opengl矩阵变换.YUV与RGB互转.Opengl水印贴图.Opengl转场动画 ...
- 《视觉开发专题》之 OpenGL 3D动画绘制图形学概念的理解
知识前导 计算机图形学的终极目标--讨好人类视觉系统 最近在啃的书中有一本叫<计算机图形学 原理及实践>,这本书让我深有感触的是其绪论中对计算机构建真实感图像的理解:我们所致力的最终目 ...
- WebGL简易教程(五):图形变换(模型、视图、投影变换)
文章目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 ...
- WebGl 球面计算公式
概要 以下所涉及到的数学模型包括: WebGl 的球体模型构建 WebGl 场景交互时视角变换的方法 WebGl 中 3D 空间的点在二维平面上的投影 360 度播放器的视频流的处理 以上是全景播放器 ...
- unity-shader相关
title: unity-shader相关 categories: Unity3d-Shader tags: [unity, shader] date: 2017-09-12 10:05:18 com ...
- 图形学opengl实验二-桌子的矩阵变换
在OpenGL编程基础上,通过实现实验内容,掌握OpenGL的矩阵使用,并验证课程中矩阵变换的内容: #include <GL/glut.h> float size = 0.25; //缩 ...
最新文章
- 昇思MindSpore1.6发布 AI开发者体验再升级
- pg数据库生成随机时间_postgresql 时区与时间函数-阿里云开发者社区
- 【C++】运算符重载 Operator Overload
- `>>`(有符号右移) 和 `>>>`(无符号右移)的区别
- [转]如何进行单元测试
- 1.10 编程基础之简单排序 03 成绩排序 3分 python
- 第一 二章 计算机基础知识,[精品]第二章-计算机基础知识.doc
- java--线程安全
- zabbix 时间错误_监控的朋友看过来,官方社区专家开源的Zabbix报表系统
- storage相关网站
- 【ECG实践篇(1)】MIT-BIH数据库数据解析的方法以及使用rdann获取人工标注注释的方法
- 学校计算机维护投标书,信息化系统硬件及应用系统安全运维服务投标书范本
- 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第9章 阿里巴巴数据整合及管理体系
- 推荐 15个 React 图标库
- Redisson延迟队列
- 苹果截屏快捷键_Mac进阶:掌握这 5 个冷门快捷键,让Mac更好用
- Java:冒泡排序法
- linux查看某个文件大小
- 【操作系统概念-作业1】Introduction
- c语言鼠标打地鼠程序,如何使用C语言实现打地鼠的游戏