UnityShader数学基础

左手右手坐标系
二维坐标系尽管x和y指向虽然可能不同,但总可以通过一些旋转操作来使他们的坐标轴指向相同,从这种意义上来说,所有的二维笛卡尔坐标系都是等价的。但对于三维笛卡尔坐标系,靠旋转并不能让两个不同朝向的坐标系重合,也就是说,三维笛卡尔坐标系并不都是等价的。因此,出现了两种不同的三维坐标系:左手坐标系和右手坐标系。我们可以用双手来判断一个坐标系的旋向性,举起左手,食指和大拇指摆出一个L手势,并且让食指指向上,大拇指向右,然后伸出中指,应该是指向前方,这样就是一个左手
坐标系,大拇指食指以及中指分别对应了+x +y +z的方向,同样也可以用右手得到一个右手坐标系。
在这里插入图片描述
在这里插入图片描述
除了坐标轴朝向不同,左右手坐标系对于正向旋转的定义也不同,两个坐标系的旋转方向分别是由左手右手定则确定的,左手坐标系旋转方向是顺时针,右手坐标系旋转正方向是逆时针。
在这里插入图片描述
左右手坐标系之间是可以转换的,最简单方法就是其中一个轴反转,其他两个轴不变。

Unity模型和世界空间使用的是左手坐标系,模型空间中一个物体的右侧,上侧,和前侧分别对应了x,y,z轴的正方向。
在这里插入图片描述

对于观察空间来说,Unity使用的是右手坐标系。观察空间,以摄像机为原点的坐标系。在这个坐标系中,摄像机的前向方向是z轴的负方向,这与模型空间和世界空间中的定义相反,z轴坐标的减少意味场景深度的增加。
在这里插入图片描述
向量叉乘
叉乘的公式
在这里插入图片描述
叉乘满足反交换律,对两个矢量进行叉积的结果会得到一个同时垂直于这两个矢量的新矢量,新矢量的模等于两个矢量的模的乘积再乘以之间夹角的正弦值。公式如下
在这里插入图片描述
新矢量的方向根据左手右手坐标系来确定

矩阵
一个矩阵可以把一个矢量从一个坐标空间转换到另一个坐标空间。
正交矩阵
三维变换中经常需要使用逆矩阵来求解反向的变换,求解逆矩阵往往计算很大,但转置矩阵非常容易得到。如何判断一个矩阵是否是正交矩阵呢,直接根据公式定义计算量也很大。可以根据正交矩阵的定义:
在这里插入图片描述
得到结论:
矩阵的每一行,都是单位矢量,因为只有这样他们与自己的点积才是1
矩阵的每一行,之间相互垂直,只有这样他们的点积才能是0
同样每一列也满足上述条件,因为M是正交矩阵,转置矩阵也是正交矩阵

行矩阵还是列矩阵
矩阵相乘时候选择行矩阵还是列矩阵来表示矢量是非常重要的,因为这决定了矩阵乘法的书写顺序和结果。Unity中,把矢量放在矩阵右侧,就是把矢量转换成列矩阵来运算。这意味着,我们的矩阵乘法通常都是右乘。使用列向量的结果是,我们的阅读顺序是从右向左。

矩阵的几何意义 变换
线性变换包括,旋转缩放,错切,镜像,正交投影,除了线性变换还有平移变换,可以使用一个3x3的矩阵表示所有的线性变换。仿射变换就是合并线性变换和平移变换的变换类型,平移变换需要使用一个4x4的矩阵来表示,因此需要把矢量扩展到四维空间,就是齐次坐标空间。下图给出了图形学常见的变换矩阵名称以及他们的特性:
在这里插入图片描述
在这里插入图片描述

齐次坐标
齐次坐标是一个四维矢量。如何把三维矢量转变齐次坐标,对于一个点,从三维坐标转换成齐次坐标是把w分量设为1,对于方向矢量来说,需要把w设为0.这样的设置导致,当用一个4x4的矩阵对一个点进行变换时候,平移旋转缩放都会施加在这点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值