Unity Shader入门精要 第4章 笛卡尔坐标系 读书笔记
第4章 学习Shader所需的数学基础-笛卡尔坐标系
注意:图片的来源基本来自作者冯乐乐的GitHub,感谢作者分享
https://github.com/candycat1992/Unity_Shaders_Book
计算机图形学是建立在虚拟世界上的数学模型
矢量和矩阵
游戏中的数学绝大部分是为了在 笛卡尔坐标系下 计算位置、距离和角度等变量。
二维笛卡尔坐标系:
1、一个特殊的点,即原点,它是整个坐标系的中心
2、两条过原点的互相垂直的矢量,即x轴和y轴。这些坐标轴也被称为是该坐标系的基矢量。
所有的二维笛卡尔坐标系都是等价的。(旋转 + 翻转)
三维笛卡尔坐标系:
3个坐标轴:三维坐标系的基矢量
正交基:3个坐标轴互相垂直但是长度不为1(正交:互相垂直)
标准正交基:3个坐标轴互相垂直且长度为1(标准:长度为1)
三维笛卡尔坐标系并不能使用两个不同朝向的坐标系重合。(三维笛卡尔坐标系并不都是等价的)
左手坐标系与右手坐标系具有不同的旋向性,无法达到重合的目的。利用双手来判断一个坐标系的旋向性。
左手坐标系和右手坐标系在绝大多数情况下不会对底层的数学运算造成影响,但是会在视觉表现上有所差异。
如果想要在左手和右手坐标系中表示同一个点,就需要把其中一个坐标系中的表示方法中的某个轴方向,一般是把z轴取反(即 在同个空间下,左手坐标系(0,0,1) = 右手坐标系(0,0,-1))。
注意:绝对空间中的同一个点,在左手和右手坐标系中进行同样角度的旋转,其旋转方向是不一样的。在左手坐标系中按顺时针方向旋转 = 在右手坐标系中按逆时针方向旋转
类型1:左手坐标系:
类型2:右手坐标系:
通过判断前向(forward)的方向,也可以确定是左手还是右手坐标系:
坐直,向右伸直右手,此时右手方向就是x轴的正向,头顶向上的方向就是y轴的正向。
正前方的方向是z轴的正向:左手坐标系
正前方的方向是z轴的负向:右手坐标系
正向旋转的定义:左手法则 和 右手法则
左手坐标系 的旋转正方向:左手法则
右手坐标系 的旋转正方向:右手法则
为了达到同样的视觉效果,左右手坐标系在z轴上的移动以及旋转方向是不同的。如果使用相同的数学运算,那么得到的视觉效果就是不一样的。如果需要从左手坐标系迁移到右手坐标系,并且保持视觉上的不变,就需要进行一些变换。
Unity使用的坐标系
1、在模型空间和世界空间中:左手坐标系
一个物体的右侧、上侧和前侧分别对应了 x轴、y轴 和 z轴 的方向
2、观察空间:右手坐标系
观察空间:以摄像机为原点的坐标系,在这个坐标系中,摄像机的前向是z轴的负方向,这与在模型空间和世界空间中的定义相反。
z轴越小,物体的深度越大,离摄像机越远