OpenGL矩阵变换

article/2025/9/15 6:59:08

参考内容:
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 × × cos cos θ θ - z × × sin sin θ θ 。下面为求解过程:
这里写图片描述
绕X轴旋转时,x值不变,故可将三维问题投影到Y-Z平面进行计算,如上图示点(y, z)旋转 θ θ 到达点(y1, z1),推到过程如下所示:
这里写图片描述
4. 透视图画法
这里写图片描述


http://chatgpt.dhexx.cn/article/p9tQOc2y.shtml

相关文章

MATLAB矩阵变换

目录 对角阵与三角阵 1、对角阵 (1)提取矩阵的对角线元素 (2)构造对角阵 2、三角阵 (1)上三角阵 (2)下三角阵 矩阵的转置与旋转 1、矩阵的转置 2、矩阵的旋转 3、矩阵的左右翻转 4、矩阵的上下翻转 矩阵的逆与伪逆 1、矩阵的逆 2、矩阵的伪…

Cesium 矩阵变换

在Cesium和其他三维开发中中经常用到矩阵变换。比如将一个物体移动、缩放、平移都可以用变换矩阵来计算。 再比如将三维场景中的物体转换为屏幕上显示的二维图形,需要用到透视投影(perspective projection)矩阵。 变换(tansform…

浅谈矩阵变换——Matrix

矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。 每种变换都对应一个变换矩阵,通过矩阵乘法,可以把多个变换矩阵相乘得到复合变换矩阵。 矩阵乘法不支持交换律,因此不同的变换顺序得到的变换矩阵也是不相同…

变换矩阵

1、变换矩阵 变换矩阵可以分解为缩放,旋转,平移矩阵的乘积: M T * R * S - 右手坐标系 当均匀缩放时,旋转和缩放可以交换顺序 缩放和平移不可以交换顺序 2、子坐标系与父坐标系 由在父坐标系中的坐标位置P,和三…

矩阵基础与变换

矩阵基础 矩阵的基本概念 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵(引用百度百科)。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列。 矩阵的加法 同型…

2.2 矩阵变换

写在前面:作者本人是纯纯的菜鸟,学习的内容来自于 中国大学MOOC 中南大学 《科学计算与MATLAB语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场! 何为矩阵变化&#…

线性代数学习笔记——第七十二讲——共轭矩阵

1. 本讲内容概要 2. 复数及其性质及复数的运算 3. 复共轭及模 4. 共轭矩阵的定义及性质

共轭矩阵 正定矩阵

https://blog.csdn.net/know9163/article/details/80551764

共轭 、 共轭转置、共轭矩阵、酉矩阵、正定矩阵、半正定矩阵

共轭复数 实数部分相同而虚数部分互为相反数的两个复数。 矩阵的共轭转置 把矩阵转置后,再把每一个数换成它的共轭复数。 自共轭矩阵 矩阵中每一个第i 行第j 列的元素都与第j 行第i 列的元素的共轭相等。 酉矩阵 AH 是A 的共轭转置 A叫做酉矩阵 正定矩阵 半正…

matlab-线性代数 对矩阵取共轭(不用函数)

由上图所示,可以得知:a是求矩阵的共轭转置,而a.是求矩阵的共轭。在数学中,共轭转置表示为在矩阵的右上角加上H。 如果矩阵是实数矩阵,那么a和a.的结果一样,都是求矩阵的转置,如下图所示&#xf…

我的矩阵学习

摘自矩阵(数学术语)_百度百科 定义 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i…

矩阵的共轭

The conjugate of a matrix(矩阵的共轭):矩阵元素中有复数(complex number),将矩阵中的复数求共轭,实数不变。矩阵的共轭记为。如:

旋转矩阵,矩阵,共轭矩阵

旋转矩阵,矩阵,共轭矩阵 1.旋转矩阵1. 旋转矩阵简介2. 性质3. 二维空间3.1 普通旋转3.2 复平面 4. 三维空间4.1 旋转4.2 角-轴表示和四元数表示4.3 欧拉角表示4.4 对称保持 SVD 表示 5 .其他5.1 旋转轴5.2 叉乘计算 2 矩阵2.1 定义2.2 矩阵的基本运算2.3…

矩阵的迹\矩阵的秩\伴随矩阵\共轭矩阵,基底、维数与秩,相对某个基底的坐标计算方法

矩阵的迹(Trace) n n n\times n nn的方阵A的n个对角线元素的和称为方阵A的迹,记作tr(A). A ( a 11 ⋯ a 1 n ⋮ ⋮ a n 1 ⋯ a n n ) A\begin{pmatrix}a_{11}&\cdots &a_{1n}\\\vdots&\ &\vdots\\a_{n1}&\cdots&a_…

共轭复数,共轭根式,共轭矩阵,共轭方向,共轭方向法,共轭梯度法,共轭分布,共轭函数,傅里叶变换的共轭对称

目录 1. 共轭复数 2. 傅里叶变换的共轭对称性 3. 共轭根式(radical conjugates) 4. 共轭矩阵(自共轭矩阵、Hermitian(埃尔米特)矩阵) 5. 共轭方向 6. 共轭方向法 7. 共轭梯度法 8. 共轭分布(conjugacy) 9. 共轭函数&…

Java关键字之Assert

参考博客来自:Assert断言语法与触发 一.assert关键字是什么? 在C和C语言中都有assert关键,表示断言。 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多,与之同理的就是if&#xff…

java关键字概念

1. 访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言…

Java关键字—基本数据类型

Java关键字之—基本数据类型 byte、shout、int、long、float、double、boolean、char关键字 byte、shout、int、long、float、double基本数据类型中的数值型,且在保存数据时第一个bit要作为符号位进行整形符号的保存,0为正数,1为负数。 byte…

Java关键字和标识符

java关键字和标识符知识点详细解析,如下: java关键字知识点 什么是java关键字? 关键字的概念:Java 语言中有一些具有特殊用途的词被称为关键字。 java中常用关键字: 注意:Java 关键字是区分大小写的。所…

Java关键字查询

java关键字_百度百科 (baidu.com)https://baike.baidu.com/item/java%E5%85%B3%E9%94%AE%E5%AD%97/5808816?fraladdin 关键字 含义 abstract 表明类或者成员方法具有抽象属性 assert 断言,用来进行程序调试 boolean 基本数据类型之一,声明布尔类…