第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > UnityShader数学基础

UnityShader数学基础

时间:2020-03-26 09:11:52

相关推荐

UnityShader数学基础

左手右手坐标系

二维坐标系尽管x和y指向虽然可能不同,但总可以通过一些旋转操作来使他们的坐标轴指向相同,从这种意义上来说,所有的二维笛卡尔坐标系都是等价的。但对于三维笛卡尔坐标系,靠旋转并不能让两个不同朝向的坐标系重合,也就是说,三维笛卡尔坐标系并不都是等价的。因此,出现了两种不同的三维坐标系:左手坐标系和右手坐标系。我们可以用双手来判断一个坐标系的旋向性,举起左手,食指和大拇指摆出一个L手势,并且让食指指向上,大拇指向右,然后伸出中指,应该是指向前方,这样就是一个左手

坐标系,大拇指食指以及中指分别对应了+x +y +z的方向,同样也可以用右手得到一个右手坐标系。

除了坐标轴朝向不同,左右手坐标系对于正向旋转的定义也不同,两个坐标系的旋转方向分别是由左手右手定则确定的,左手坐标系旋转方向是顺时针,右手坐标系旋转正方向是逆时针。

左右手坐标系之间是可以转换的,最简单方法就是其中一个轴反转,其他两个轴不变。

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

对于观察空间来说,Unity使用的是右手坐标系。观察空间,以摄像机为原点的坐标系。在这个坐标系中,摄像机的前向方向是z轴的负方向,这与模型空间和世界空间中的定义相反,z轴坐标的减少意味场景深度的增加。

向量叉乘

叉乘的公式

叉乘满足反交换律,对两个矢量进行叉积的结果会得到一个同时垂直于这两个矢量的新矢量,新矢量的模等于两个矢量的模的乘积再乘以之间夹角的正弦值。公式如下

新矢量的方向根据左手右手坐标系来确定

矩阵

一个矩阵可以把一个矢量从一个坐标空间转换到另一个坐标空间。

正交矩阵

三维变换中经常需要使用逆矩阵来求解反向的变换,求解逆矩阵往往计算很大,但转置矩阵非常容易得到。如何判断一个矩阵是否是正交矩阵呢,直接根据公式定义计算量也很大。可以根据正交矩阵的定义:

得到结论:

矩阵的每一行,都是单位矢量,因为只有这样他们与自己的点积才是1

矩阵的每一行,之间相互垂直,只有这样他们的点积才能是0

同样每一列也满足上述条件,因为M是正交矩阵,转置矩阵也是正交矩阵

行矩阵还是列矩阵

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

矩阵的几何意义 变换

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。