一 图形学概述, 线性代数

一 图形学概述

1. 什么是图形学

图形学(计算机图形学)是研究如何利用计算机对图形和图像进行生成、表示、处理与显示的一门学科,主要关注将抽象的数据或数学模型转化为直观可视的二维或三维图像。

它融合了数学、物理、计算机科学和工程技术,核心内容包括几何建模、图形变换、光照与材质、渲染算法以及图像处理等。

图形学广泛应用于游戏与动画、虚拟现实与增强现实、计算机辅助设计(CAD)、科学可视化和影视特效等领域,在提升信息表达效率和视觉真实感方面发挥着重要作用。

2. 为什么学习图形学

创建并交互于逼真的虚拟世界

需要理解物理世界的各个方面

新的计算方法, 显示技术和技术

3. 主要学习内容

光栅化

曲线和曲面几何

光线追踪

动画/模拟/仿真

二 图形学的依赖学科

  1. 线性代数, 微积分, 统计
  2. 光学, 力学
  3. 信号处理, 数值分析
  4. 艺术美感

三 线性代数

1. 向量 vector

方向与长度

单位向量

向量求和, 平行四边形法则, 三角形法则

直角坐标系:

因为在直角坐标系中计算两个向量的和比较方便, 对(x²+y²)开方.

图形学中, 默认认为一个向量是"列向量", 垂直方向.

向量转置, 垂直变为"横向量".

向量乘法:

(1) 点乘 ·

点乘的结果是一个数值

复制代码
→a · →b =  |a| * |b| * cosθ
cosθ = (→a · →b) / ( |a| * |b| )

点乘的用途:

复制代码
1. 给定两个向量就可以求出夹角的余弦值, 进而算出夹角.
特别的, 当两个向量都是单位向量时, 有:
cosθ = →a · →b

2. 判断两个向量是接近还是远离
点乘结果:
    接近 1:  逐渐接近
    接近 0:  接近垂直
    接近-1:  逐渐远离

3. 给定一个向量a, 以半圆划分面前和背后, 判断其他向量与a的方向是相同还是不同.
点乘结果: 
    正数: 方向一致, 向前
    负数: 方向不同, 向后
    0: 在前后交界处, 垂直

二维:

复制代码
→a · →b = (xa, ya) * (xb, yb) = xa*xb + ya*yb

三维:

复制代码
→a · →b = (xa, ya, za) * (xb, yb, zb) = xa*xb + ya*yb + za*zb

投影计算:

向量a和b的夹角为θ, 计算→b在→a上的投影

由于向量b与b的投影构成直角三角形, 向量b是斜边, b投影为θ角的临边, 有:

复制代码
cosθ = b投影 / |b|

则:

复制代码
b投影 = |b| * cosθ

投影计算的用途:

复制代码
可以把向量b分解为2个向量, 其中一个是b投影, 另一个是垂直于b投影的向量, 
那么这个向量可以通过 (→b - b投影) 得到.
(2) 叉乘 ×

叉乘的结果是向量, 既有长度, 也有方向.

右手坐标系

通过x轴与y轴叉乘可以得到垂直于它们两个的z轴.

复制代码
叉乘不满足交换律, 因为结果的方向相反.
x × y = +z
y × x = -z
x × x = 0

代数表示:

复制代码
a × b = (ya*zb - yb*za)
        (za*xb - xa*zb)
        (xa*yb - ya*xb)

向量的叉乘也可以用矩阵表示.

把向量写成矩阵的形式,

叉乘的用途:

复制代码
1. 判定左或右
2. 判定一个点在三角形的内或外
    如果点在三条边的向量的同侧, 则点在内部
    在光栅化时, 需要判断像素是否在三角形内侧, 内侧则着色.
2. 矩阵
(1)矩阵与矩阵相乘

首先两个矩阵是满足相乘的条件: 计算(M × P), 那么

复制代码
(M)的"列数" = (P)的"行数"
(M × N)(N × P) = (M × P)

(M): 3 × 2 矩阵

复制代码
[1,3]
[5,2]
[0,4]

(P ): 2 × 4 矩阵

复制代码
[3,6,9,4]
[2,7,8,3]

(M × P): = 3 × 4 矩阵

复制代码
[(1,3)·(3,2), (1,3)·(6,7), (1,3)·(9,8), (1,3)·(4,3)]
[(5,2)·(3,2), (5,2)·(6,7), (5,2)·(9,8), (5,2)·(4,3)]
[(0,4)·(3,2), (0,4)·(6,7), (0,4)·(9,8), (0,4)·(4,3)]

=

[ 9, 27, 33, 13]
[19, 44, 61, 26]
[ 8, 28, 32, 12]

计算技巧:

复制代码
例如想计算结果矩阵中, 位于 第2行, 第4列 的值,
    从(M)中找到第2行: (5,2)
    从(P)中找到第4列: (4,3)
    计算点积: (5,2)·(4,3) = 5*4 + 2*3 = 26

运算性质: 交换律不行, 结合律可以

复制代码
1. 通常情况下, AB ≠ BA
2. (AB)C = A(BC)
3. A(B+C) = AB + AC
4. (A+B)C = AC + BC
(2) 矩阵与向量相乘

矩阵在左边, 向量在右边, 向量永远都是列向量 (M × 1)

2D变换:

按y轴做对称:

复制代码
    [-1, 0]
    [ 0, 1]
    ×
    [x]
    [y]
    =
    [-x]
    [y]
(3) 矩阵转置 (AT)

转置操作:

复制代码
[1,2]
[3,4]
[5,6]
T
[1,3,5]
[2,4,6]

运算性质:

复制代码
(A × B)T = BT × AT
(4) 单位矩阵 (I)

对角矩阵, 从左上->右下, 对角线上的值都不是0的矩阵.

对角线上的值都为1的矩阵是单位矩阵.

例如:

复制代码
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
(5) 矩阵的逆, 互逆矩阵 (A-1)

如果能找到一个矩阵, 和原来的矩阵相乘, 得到的矩阵是一个单位矩阵, 那么这两个矩阵就是互逆矩阵,

运算性质:

复制代码
-1表示矩阵的逆

A × A-1 = A-1 × A = I
(AB)-1 = B-1 × A-1
3. 向量乘法转换为矩阵表示
(1) 向量点乘

向量默认为垂直方向.

复制代码
a · b = (aT) × (b)
=
                [xb]
[xa, ya, za] ×  [yb] = [xaxb, yayb, zazb]
                [zb]
(2) 向量叉乘
复制代码
a × b = (A*) × (b)
=
[0, -za, ya]    [xb]
[za, 0, -xa] ×  [yb]
[-ya, xa, 0]    [zb]
相关推荐
成都渲染101云渲染66662 小时前
Blender 云渲染平台实测对比:iRender、GarageFarm、渲染101 哪家更适合动画云渲染?
ue5·图形渲染·blender·maya·houdini
猿饵块2 小时前
c++17--std::owner_less
开发语言·c++
渡我白衣2 小时前
计算机组成原理(5):计算机的性能指标
服务器·网络·c++·人工智能·网络协议·tcp/ip·网络安全
初願致夕霞2 小时前
C++文件压缩及解压缩小程序的实现
c++·小程序·apache
郝学胜-神的一滴2 小时前
设计模式依赖于多态特性
java·开发语言·c++·python·程序人生·设计模式·软件工程
ULTRA??3 小时前
判断水仙花数并输出,c++
c++·算法
_Voosk3 小时前
写了个开头的 C++ Tutorial
开发语言·c++
lingggggaaaa3 小时前
C2远控篇&C&C++&SC转换格式&UUID标识&MAC物理&IPv4地址&减少熵值
c语言·c++·学习·安全·web安全·网络安全·免杀对抗
for_ever_love__3 小时前
移动应用开发实验室25级期末考核
c++