美文网首页
OpenGL学习之3D数学

OpenGL学习之3D数学

作者: 懿轩加油 | 来源:发表于2019-05-28 15:48 被阅读0次

一:向量的记法

向量的记法.png

通常使⽤下标法来引⽤向量量的某个分量
⽐比如,a1 = 1;a2 = 2 ; a3 = 3
实际开发中针对的是2D\3D\4D向量量,所以不用下标法
2D向量量:x y
3D向量量:x y z
4D向量量:x y z w

向量的前面加个-号,表示向量变负

2:向量大小计算公式

2D向量大小计算公式
||v|| = √Vx² + Vy ²
3D向量大小计算公式
||v|| = √Vx² + Vy ² + Vz²

3:标准向量

Vnorm = V / ||V||,注意V不能为0
零向量是不能被标准的,数学上是不允许的,因为将导致除以0,几何上没有任何意义,因为零向量没有方向

4:向量的加减

向量的加减只能是同一纬度下才能加减,否则不能运算

5:向量之间的距离计算

(A,B) = ||B - A|| = √(Bx - Ax)² + (By - Ay)² + (Bz - Az)²
同样的一定是要同一维度下

5:向量的点乘

应⽤到2D、3D 中:
A• B = AxBx + AyBy A,B都是2D向量
A• B = AxBx + AyBy + AzBz A,B都是3D向量

点乘的意义

a• b = ||a||||b||cos(q) (q是两个向量之间的夹角)

点乘.png
6:案例(根据向量V和向量N求向量V2和向量V1)
向量运算.png

V2计算:
V2平行于N,即可表示为: V2 = N *||V2|| / ||N||
因此只要求得V2的模就能计算投影向量的值,借助三角分解,方便求解
cos q = || V2|| / ||V||
|| V2|| = cos q * ||V||
V2 = N * cos q * ||V|| / ||N||
同时乘以||N||后得 V2 = N * cos q * ||V||• ||N||/ ||N||²
V2 = N * V• N/ ||N||²
V1计算:
V1 + V2 = ||V||;
V1 = ||V|| - V2 = ||V|| - N * V• N/ ||N||²

7:单位矩阵

单位矩阵,是⼀种特殊的对⻆矩阵,n维单位矩阵记做 In。是n * n 矩阵。对象元素为1.其他元素为0。
单位矩阵⾮常特殊,因为它是矩阵乘法单位元,其基本性质是⽤用任意1个矩阵乘以单位矩阵,都将得到原矩阵。所以在某种意义上对矩阵的作⽤用就犹如1对于标量的作⽤。

例如 3 * 3 单位矩阵

3*3矩阵.png
8:矩阵转置

⼀个r * c 矩阵M。M的转置记做MT,是⼀个 c * r 矩阵。它的列由M的⾏组成。可以从另⽅面理解。 MijT = Mji ,即沿着矩阵的对⻆线翻折。

矩阵转置1.png

对向量而言,转置将使得行向量变成列向量,是列向量变成行向量

行列向量转置.png
9:标量和矩阵相乘
标量和矩阵相乘.png

设A 为 4 * 2 矩阵,B 为 2 * 5 矩阵,那么结果AB 为 4 * 5 矩阵。

矩阵与矩阵相乘1.png 矩阵与矩阵相乘2.png

矩阵相乘法则:对结果中的任意元素Cij,取A的第i行和第j列,将⾏和列中的对应元素相乘。然后将结果相加 (等于A的i列和B的j列的点积)。Cij就等于这个和。

矩阵与矩阵相乘3.png 矩阵与矩阵相乘4.png
2乘2矩阵1.png 2乘2矩阵2.png
矩阵乘法注意事项:

1.任意矩阵M乘以方阵S,不管从哪边乘,都得到与原矩阵⼤小相同的矩阵。当然,前提是假定乘法有意义。如果S是单位矩阵,结果就是原矩阵M,即:MI = IM = M 。
2.矩阵乘法不满⾜交换律,即:AB != BA
3.矩阵乘法满足结合律,即:(AB)C = A(BC)。假定ABC的维数使得其乘法有意义,要注意如果(AB)C有意义,那么A(BC)就 一定有意义。
4.矩阵乘法也满⾜与标量或向量的结合律,即:(kA)B = k(AB) = A(kB); (vA)B = v(AB);
5.矩阵积的转置相当于先转置矩阵然后以相反的顺序乘法,即:(AB)T = BT AT

总结

行向量左乘矩阵时,结果是行向量;
列向量右乘矩阵时,结果是列向量;
行向量右乘矩阵时,结果是⽆意义;
列向量左乘矩阵时,结果是⽆意义;
矩阵与向量相乘 注意事项:
1.结果向量中的每个元素都是原向量与矩阵中单独行或列的点积;
2.矩阵⼀向量乘法满足对向量加法的分配律,对于向量v,w 和 矩阵M 有,
(v + w)M = vM + wM;

为什么要使用列向量?

1.等式中使⽤列向量形式更好
2.线性代数书中使用列向量
3.多本计算机图形学都是使用的列向量
4.OpenGL 使⽤的是列向量

10:矩阵是如何变换成向量的

?

⾸先,向量[1,-3 -4]是如果实现位移
位移[1,0,0],随后位移[0,-3,0],最后位移[0,0,4]

矩阵转换为向量1.png 矩阵转换为向量2.png
向量转换为矩阵.png 基向量乘以3乘3矩阵的情况
基向量乘以矩阵1.png 基向量乘以矩阵2.png 基向量乘以矩阵3.png 总结

1:基向量[1,0,0]乘以矩阵M ,结果是M的第⼀行。后⾯的2个⽅程也是⼀样的规律
2:矩阵的每一个都能解释为转换后的基本向量

相关文章

  • OpenGL学习之3D数学

    一:向量的记法 通常使⽤下标法来引⽤向量量的某个分量⽐比如,a1 = 1;a2 = 2 ; a3 = 3实际开发中...

  • 02总结--010--OpenGL 基础变换:向量和矩阵的深入理

    在正式进入本章节内容之前,先来正视几个观念。 1. 3D 数学在OpenGL中充当什么角色? 对于学习OpenGL...

  • OpenGL向量、矩阵应用

    一、3D数学 3D数学.在图像图形开发中的充当了什么⻆色?对于学习OpenGL 有一个误区,就是大家认为如果不能精...

  • OpenGL笔记十:OpenGL ES初探

    前言 期待您移步上篇:OpenGL笔记九:3D数学小记 OpenGL ES OpenGL ES允许应⽤程序利⽤底层...

  • OpenGL 之3D数学

    3D数学和图像图形的关系 对于学习OpenGL 有一个误区,就是大家认为如果不能精通那些3D图形数学知识,会让我们...

  • OpenGL之3D数学

    向量 向量是既有大小又有方向的量。 零向量与单位向量 模等于0的向量为零向量,模等于1的向量叫做单位向量。注意零向...

  • OpenGL (三) OpenGL基本概念和绘制简单三角形

    前言 为啥要学习OpenGL? OpenGL的用途太多了,而且是跨平台的图形API工具,主要用在3D方面。3D图形...

  • 6-1.向量

    对于学习OpenGL 有⼀个误区,就是⼤家认为如果不能精通那些3D图形数学知识,会让我们寸步难⾏,其实不然。就像我...

  • OpenGL 3D数学

    1.标量与向量相乘 k * [x, y, z] = [x, y, z] * k = [kx, ky, kz] 2....

  • OpenGL中的向量和矩阵

    OpenGL坐标变化时经常用到矩阵来计算变化后点的位置,为了更好的理解3D数学在OpenGL中的作用,本文将简单地...

网友评论

      本文标题:OpenGL学习之3D数学

      本文链接:https://www.haomeiwen.com/subject/pzjrtctx.html