Unity3D - Shader - 矩阵和变换

矩阵

一个m×n的矩阵是一个由m行n列元素排列成的矩形阵列。关于矩阵的更详细信息与计算在这里

变换

基本概念

变换(transform)是把一些数据(点、矢量、颜色)通过某种方式进行转换的过程。

线性变换(Linear transform),是指可以保留矢量加和标量乘的变换。其数学公式是:

f(x)+f(y)=f(x+y)kf(x)=f(kx)

缩放(scale) 以及旋转(rotation)都是最普通的线性变换。

线性变换都包括:旋转、缩放、错切(Shear)、镜像(Mirroring)、正交投影(orthographic projection)。

仿射变换(affine transform)可以合并线性变换和平移变换,将仿射变换扩展到4维空间下用4x4的矩阵来表示,它就是齐次坐标空间(homogeneous space)

齐次坐标

齐次坐标就是将3x3矩阵(其不能表示平移操作),扩展到4x4的矩阵。

4x4的矩阵可以表示平移、缩放、变换,可以将4x4的就很分解成4个部分:

M3x301x3t3x11

其中,左上角的矩阵 M3x3 用于表示旋转和缩放, t3x1 用于表示平移, 01x3 是零矩阵,右下角的是标量1。

平移矩阵

100001000010txtytz1xyz1=x+txy+tyz+tz1

结果x、y、z分量分别增加了一个位置的偏移,在3D中的可视化效果就是把 (x,y,z) 在空间中平移了 (tx,ty,tz) 个单位。

缩放矩阵

kx0000ky0000kz00001xyz1=kxxkyykzz1

对模型空间沿着x轴、y轴、z轴进行缩放。若 kx=ky=kz ,这样的缩放是统一缩放,否则是非统一缩放。

其逆矩阵是:

1kx00001ky00001kz00001

旋转矩阵

绕x轴旋转a度:

Rx(a)=10000cos(a)sin(a)00sin(a)cos(a)00001

绕y轴旋转a度:

Ry(a)=cos(a)0sin(a)00100sin(a)0)cos(a)00001

绕z轴旋转a度:

Rz(a)=cos(a)sin(a)00sin(a)cos(a)0000100001

复合变换

顺序是右乘且先缩放再旋转,最后平移。

Pnew=MtranslationMrotationMscalePold

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值