您的位置:首页 > 移动开发 > Unity3D

UnityShader入门精要学习笔记(二):数学知识

2017-07-05 11:18 851 查看
一. 笛卡尔坐标系

平时我们使用的是笛卡尔坐标系,记得高中时还学过极坐标系

左手坐标系:中指指向+Z,食指指向+Y,拇指指向+X(右方),旋转正方向为顺时针

右手坐标系:中指指向+Z,食指指向+Y,拇指指向+X(左方),旋转正方向为逆时针





在Unity中,除了观察空间(摄像机视野)使用的是右手坐标系以外,其它都是使用左手坐标系。

二.点和矢量(略)

三.矩阵

【矩阵乘法】

rXn的矩阵A和一个nXc的矩阵B,它们相乘会得到一个rXc的矩阵 C =AB

简单图示:



c23 = a21*b13 + a22*b23

同理:

c21 = a21*b11 + a22*b21

【特殊矩阵】

方阵:矩阵的行数和列数相同

单位矩阵:对线元素全为1,其余为0

转置矩阵:


(特性 )



逆矩阵:并非全部矩阵都可逆,逆矩阵与原矩阵相乘(无论左右)得到单位矩阵

正交矩阵:前提为方阵,与自身的转置矩阵相乘(无论左右)得到单位矩阵

实际上,其转置矩阵与逆矩阵相等

【矩阵变换】

线性变换

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


仿射变换

合并线性变换和平移变换的变换类型。仿射变换可以使用一个4X4的矩阵来表示,为此我们需要把矢量扩展到四维空间下,这就是齐次坐标系。

尝试使用线性变换进行平移操作
令f(x) = x + (1,2,3)
若x=1,那么:
f(x)+f(x) = (4,6,8)
f(2x) = f(x+x) = (3,4,5)
不满足最后一条
kf(x) = f(kx)
可见:我么无法使用单纯的线性变换来进行平移操作,于是就有了放射变换


平移与缩放

对于任意一点point = (x,y,z) —————> (x,y,z,1)

为了让其能够同时接受平移变换,所以将其转换到齐次坐标下,其w分量设为1,这样当用一个4X4的矩阵对一个点进行变换时,平移、旋转、缩放都会施加于该点

[平移]



[缩放]



对于任意一方向矢量Vector=(x,y,z)

由于单纯矢量只有长度与方向的概念,所以平移变换对于矢量来说没有实际意义。

即矢量被平移之后不会发生改变。

所以转换到齐次坐标系下,其w分量为0

[平移]



[缩放]



旋转







关于复合变换

优先进行缩放,然后进行旋转,最后进行平移

四.坐标空间

模型空间

通常以模型的中心为原点,采用左手坐标系

比如玩Maya时,按住D键不放调整模型的中心点

Unity中model.TransformPoint(v3)函数可以得到model的局部空间中的点v3在世界空间

中的表示

世界空间

就是的游戏场景中的小宇宙

Unity中model.InverseTransformPoint(v3)可以得到世界空间中的点v3在模型model的局部空间中的表示

观察空间

也就是摄像机空间,采用右手坐标系

Unity中可以调用Camera.cameraToWorldMatrix以及Camera.worldToCameraMatrix等接口自行计算某模型在观察空间中的位置

这里要注意一点:观察空间和屏幕空间是不同的!前者是三维空间,而后者是二维空间。观察空间到屏幕空间需要进行一个操作,那就是投影(Projection)。

剪裁空间

前面的观察空间是以摄像机为中心的,而剪裁空间则是摄像机的视锥体内部空间
将前者中的一点转换到剪裁空间中所用的变换矩阵叫做剪裁矩阵,也被熟悉的称为投影矩阵
视锥体又分透视投影和正交投影


屏幕空间

屏幕空间是一个二维空间,将剪裁空间中的顶点投影到屏幕空间,生成对应的2D坐标:
首先,进行标准齐次除法,也就是透视除法后,用齐次坐标系的w分量除以x、y、z分量






坐标空间以及变换的总结



五.法线变换

法线是经常需要我们特殊处理的一种方向矢量,比如次时代技术中的高光贴图(BumpMap),专门存储模型的表面法线信息。

切线由两点之间的差值得到,与法线垂直。





值得注意的是,如果变换矩阵是一个正交矩阵,那么其逆矩阵就等于自身的转置矩阵。

那么左乘这个变换矩阵的逆转置矩阵就等于它自身了。

另外补充一个特性,左乘一个矩阵的转置等于右乘该矩阵!

六.Unity Shader内置变量

【内置矩阵】



【摄像机与屏幕参数】





七.子空间坐标向父空间的转换

已知子坐标空间C的3个坐标轴在父坐标空间P下的表示为xc、yc、zc,以及其原点位置Oc

给定一个子坐标空间中的一点Ac = (a,b,c)将其转换到父坐标空间下Ap:

Mc->p 经推导表示为将xc、yc、zc、Oc按列排列组成齐次矩阵。

而对于矢量无需平移,只需要将xc、yc、zc按列排列组成矩阵。

八.法线变换推理补充

在三维空间中,一个平面的表述为:ax + by + cz + d = 0;

n = (a,b,c,d) p=(x,y,z,1) 则该平面在空间中的表示为:nTp = 0

其中n为该面的法向量

现在对p进行变换,p’ = Rp

对法向量的变换,n’ = Qn

假设表示方式从空间A变换到了空间B中

变换后,该面上的任何点应该仍满足 :

(n’)Tp’ = 0

也就是

(Qn)T(Rp) = 0

nT(QTR)p = 0

因为前面有:nTp = 0

所以,当QTR = I时

nT(QTR)p = 0 成立

从而得到(R可逆的情况下)

Q = (R-1)T

九.View Space中摄像机前方的z为负值,故-z为正数

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学 图形学