数学基础

笛卡尔坐标系

二维笛卡尔坐标系

原点+两条过原点的互相垂直的矢量(x轴和y轴)

三维笛卡尔坐标系

三个相互垂直的坐标轴

左手坐标系和右手坐标系

旋向性:如果能通过旋转使两坐标系的各坐标轴指向重合,则称这两个坐标系具有相同的旋向性

x:大拇指与食指自然垂直
y:食指向上
z:中指向前

旋转正方向
左手坐标系:顺时针 (想象左手大拇指朝上后自然握拳时四指的弯曲方向)
右手坐标系:逆时针 (想象右手大拇指朝上后自然握拳时四指的弯曲方向)

Unity中使用的坐标系

左手坐标系

点和矢量

定义

点:n维空间中的一个位置
矢量:即向量,n维空间中的有向线段
矢量是一个相对量,表示相对于某个点的偏移,矢量的位置无实际意义

点和矢量的关系

任何一个点,都可看作是从原点出发的矢量

矢量运算

与标量的乘除法
将矢量的各分量分别于标量相乘除,对矢量进行缩放
与同维度矢量的加减法
对应分量分别相加减

特殊概念

模:是一个标量,表示矢量在空间中的长度

单位矢量:模为1的矢量
归一化:矢量转换为单位矢量的过程,即用矢量除以其模

零矢量:各分量值均为0
零矢量无法归一化

同维度矢量间的乘法

点乘(内积)

将两矢量对应的分量相乘后求和,得到的一个标量

叉乘(外积)

新矢量的各分量=原矢量非本分量的乘积相减,得到的矢量垂直于相乘的两个矢量
假设 矢量a = (l,m,n),矢量b =(o,p,q),则二者的叉乘结果为(mq-np,no-lq,lp-mo)

矩阵

定义

纵横排列的二维数据表格,即m*n个标量组成的长方形数组
矩阵有行、列之分

与矢量的关系

可以将矩阵的一列或一行看作一个矢量
即可以认为矢量是一个列矩阵或一个行矩阵

矩阵运算

乘法
  • 与标量
    将矩阵的各元素与标量相乘,得到新矩阵
  • 与矩阵
    条件:相乘的两个矩阵,前者的列数=后者的行数
    相乘后,得到的矩阵:行数=前者的行数,列数=后者的列数
    相乘规则:对应新矩阵中处于第i行第j列的元素,其值=前者第i行对应矢量与后者第j列对应矢量的内积
特殊矩阵
  • 方阵:行数和列数相等的矩阵

  • 对角矩阵:对角元素之外的元素均为0的方阵
    对角元素:行号和列号相等的元素

  • 单位矩阵:主对角线(从左上到右下)上的元素均为1,其余元素为0的方阵
    任何矩阵与单位矩阵相乘后,得到的还是原来的矩阵(单位矩阵相当于标量中的1)
    次对角线:右上到左下

  • 转置矩阵:将原矩阵的行和列调换(第i行变为第i列,第j列变为第j行),得到原矩阵的转置矩阵

  • 逆矩阵:方阵与自身的逆矩阵相乘,得到单位矩阵(逆矩阵的概念类似于倒数)
    并非所有方阵都有逆矩阵(如零矩阵,零矩阵的所有元素都为0)
    有逆矩阵的矩阵是可逆的(非奇异的)
    无逆矩阵的矩阵是不可逆的(奇异的)
    判断矩阵是否可逆的方式:若矩阵的行列式不为0,则该矩阵可逆

  • 正交矩阵:若方阵与自己的转置矩阵的乘积是单位矩阵,则该方阵是正交的
    即正交矩阵的转置矩阵和逆矩阵是同一个矩阵

行矩阵和列矩阵

  • 在和矩阵相乘时,将矢量视作行矩阵或列矩阵,会影响矩阵乘法的结果
  • 在Unity中,常规做法是将矢量转为列矩阵,放在矩阵的右侧进行相乘
    数学基础

变换

定义

把一些数据通过某种方式进行转换

齐次坐标

引入的理由:实现平移操作

因为3X3矩阵不能表示平移操作,将其扩展到4X4的矩阵就能实现对平移的表示
因为矩阵变为了4维,因此矢量也得变为4维,4维矢量被称为齐次坐标

通用定义

将一个原本是n维的向量用一个n+1维向量来表示,指一个用于投影几何里的坐标系统

如何将三维矢量转为齐次坐标

点:将w分量设为1(为了应用平移)
方向矢量:将w分量设为0(为了移除平移的效果)

作用

为方便计算而使用的一种表示方式

基础变换矩阵

平移矩阵

对单位矩阵做修改,第4列的前3个元素表示在各轴向上的偏移量

缩放矩阵

对单位矩阵做修改,主对角线上的前3个元素表示在各轴向上的缩放
如果希望在任意方向上进行缩放,需

  • 先将缩放轴变换到标准坐标轴
  • 沿坐标轴缩放
  • 用逆变换得到原缩放轴朝向
旋转矩阵

绕各轴旋转,有其对应的旋转矩阵

复合变换

约定变换顺序:缩放、旋转、平移
在Unity中,旋转顺序是zxy

坐标空间

类型诸多的原因

我们需要在不同情况下使用不同的坐标空间,因为某些概念只有在特定的坐标空间下才有意义,才更容易被理解

空间变换

在渲染流水线中,经常需要将一个点或方向矢量从一个坐标空间转换到另一个坐标空间

变换过程

模型空间 -> 世界空间 -> 观察空间 -> 裁剪空间 -> 屏幕空间
顶点着色器的最基本任务:将顶点坐标从模型空间转到裁剪空间(从裁剪空间到屏幕空间的转换由Unity完成)

各类空间
  • 模型空间(对象空间、局部空间)
  • 世界空间:描述绝对位置
  • 观察空间(摄像机空间):模型空间的特例
  • 裁剪空间:剔除空间外部图元,由视锥体决定
  • 屏幕空间:二维空间

法线变换

法线(法矢量)是特殊的方向矢量
在用常规变换矩阵对法线执行变换时,无法确保维持法线的垂直性
需使用原变换矩阵的逆转置矩阵来变换法线

UnityShader的内置变量

变换矩阵

Unity提供了用于坐标空间变换的矩阵

摄像机和屏幕参数

Unity提供了访问当前正在渲染的摄像机的参数信息,这些参数对应了摄像机上的Camera组件中的属性值

常见疑问

变换矩阵的阶数

只有需要平移的时候,才有必要使用4*4矩阵
CG中的矢量和矩阵类型
CG使用行优先(一行一行填充)的方式填充矩阵

Unity中的屏幕坐标

在顶点/片元着色器中,有2种方式获得片元的屏幕坐标

  • 在片元着色器的输入中声明VPOS(HLSL对屏幕坐标的语义)或WPOS语义(CG对屏幕坐标的语义)
  • 通过Unity提供的ComputeScreenPos函数
    在顶点着色器中将ComputerScreenPos的结果保存在输出结构体中
    在片元着色器中进行齐次除法运算后得到视口空间下的坐标

你可能感兴趣的:(数学基础)