图形学:用十五分钟带您推导模型,视图和投影变换矩阵

本文详细介绍了图形学中的模型矩阵、视图矩阵和投影矩阵的推导过程,包括缩放、旋转、平移、正交投影和透视投影等关键概念,适合图形学初学者复习备考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

明天考图形学了,推一下矩阵,顺便练下 Latex

数学公式警告⚠


模型矩阵

模型矩阵负责将物体进行三个变换:平移,选择和缩放。

此外,我们认为原坐标为 x,变换后则得到 x’ 坐标(接下来的变换都用该形式表示),即:

x → x ′ x \rightarrow x' xx

话不多说,开冲!


缩放

缩放矩阵非常简单,各个坐标直接乘以对应的缩放因子即可:

S ( s x , s y , s z ) = [ s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 ] S(s_x,s_y,s_z)= \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} S(sx,sy,sz)=sx0000sy0000sz00001

旋转

旋转矩阵则分为绕 x,y,z 轴的旋转。以绕 z 轴的旋转为例,我们有如下的极坐标:

在这里插入图片描述
将极坐标展开就是:

x ′ = r   c o s ϕ   c o s θ − r   s i n ϕ   s i n θ y ′ = r   s i n ϕ   c o s θ + r   c o s ϕ   s i n θ x' = r \ cos\phi \ cos\theta - r \ sin\phi \ sin\theta \\ y' = r \ sin\phi \ cos\theta + r \ cos\phi \ sin\theta x=r cosϕ cosθr sinϕ sinθy=r sinϕ cosθ+r cosϕ sinθ

将原本 xy 的极坐标:

x = r cos ⁡ ϕ y = r sin ⁡ ϕ x = r\cos\phi \\ y = r\sin\phi x=rcosϕy=rsinϕ

带入 x’ 的极坐标展开,那么有

x ′ = x cos ⁡ θ − y sin ⁡ θ y ′ = x sin ⁡ θ + y cos ⁡ θ x' = x\cos\theta-y\sin\theta \\ y' = x\sin\theta+y\cos\theta \\ x=xcosθysinθy=xsinθ+ycosθ

又因为是在 xoy 平面上进行旋转,那么有:

z ′ = z z' = z z=z

即最终的变换矩阵有:
R z ( θ ) = [ c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 0 0 0 0 1 ] R_z(\theta)= \begin{bmatrix} cos\theta & -sin\theta & 0 & 0 \\ sin\theta & cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} Rz(θ)=cosθsinθ00sinθcosθ0000100001

同理,得到绕 x,y 轴的变换矩阵(原理一样的):

R x ( θ ) = [ 1 0 0 0 0 c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 ] R_x(\theta)= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos\theta & -sin\theta & 0 \\ 0 & sin\theta & cos\theta & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} Rx(θ)=10000cosθsinθ00sinθcosθ00001

R y ( θ ) = [ c o s θ 0 − s i n θ 0 0 1 0 0 s i n θ 0 c o s θ 0 0 0 0 1 ] R_y(\theta)= \begin{bmatrix} cos\theta & 0 & -sin\theta & 0 \\ 0 & 1 & 0 & 0 \\ sin\theta & 0 & cos\theta & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} Ry(θ)=cosθ0sinθ00100sinθ0cosθ00001

平移

平移矩阵也简单,即在原坐标的基础上,加上一个常数即可:

T ( t x , t y , t z ) = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] T(t_x,t_y,t_z)= \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} T(tx,ty,tz)=100001000010txtytz1

视图矩阵

视图矩阵负责将世界坐标系下的坐标转换到相机坐标系,即标架的转换!

相机坐标系基底

首先来确定相机坐标系的基底,即基向量。我们可以通过三个变量,确定相机坐标系的(在世界坐标表示下)基,他们是:

  1. up: 一般为竖直向上向量 (0, 1, 0)
  2. eye:相机的世界坐标下的位置
  3. at:相机的视点(就是看向的点)的位置,也是世界坐标系下

即:
在这里插入图片描述

那么我们首先通过:

n ⃗ = e y e − a t \vec{n} = eye-at n =eyeat

得到指向摄像机视平面法向 n

注:
事实上 n 是反的,因为相机看向 z 轴负方向
这也是为何我们要用 eye 减去 at

然后我们再通过 n 和 up 的叉乘,得到指向相机视平面右侧的向量 u:
u ⃗ = u p ⃗ × n ⃗ \vec{u} = \vec{up} \times \vec{n} u =up ×n

即:
在这里插入图片描述

最最后我们通过将 u 和 n 进行叉乘,得到指向相机视平面上方的向量 v:

v ⃗ = n ⃗ × u ⃗ \vec{v} = \vec{n} \times \vec{u} v =n ×

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值