【Unity】3D数学基础笔记
学习⽅式:
1.了解基本的数学概念
2.了解Unity内的相关内容,加强理解。
第⼀章:3D数学介绍
1.介绍
·3D数学:研究在3D⼏何世界中的数学问题。被⼴泛的应⽤于使⽤计算机来模拟3D世界的领域,⽐如图形学,游戏,虚拟现实和动画等。
·为什么要学习3D数学:掌握了3D数学的知识之后,对我们将来学习图形学、游戏制作都有很⼤的帮助。
2.1D(数轴)
·3D:three dimensions,⽴体空间。
·1D:关于计数和度量的数学。
·数学上,数轴是个⼀维的图,整数作为特殊的点均匀地分布在⼀条线上。数轴是⼀条规定了原点、⽅向和单位长度的直线。
3.2D(笛卡尔坐标系)
·2D:关于平⾯的数学。
·数学上,相交的两条直线可以确定⼀个唯⼀的平⾯。相交于原点的两条数轴,构成了平⾯放射坐标系。
·如果两条数轴上的度量单位相等,则称此放射坐标系为笛卡尔坐标系。
·数轴互相垂直的笛卡尔坐标系,称为笛卡尔直⾓坐标系,否则称为笛卡尔斜⾓坐标系。
·
在2D笛卡尔坐标系中,我们⽤(x,y)来表⽰⼀个点。称之为坐标。
·坐标的每个分量都表明了该点与原点之间的距离和⽅位。每个分量都是到相应轴的有符号距离。
4.3D(空间直⾓坐标系)
·3D:关于3D空间的数学。
·从2D扩展到3D:相对于2D笛卡尔坐标系,我们需要3个轴来表⽰三维坐标系,⼀般叫做空间直⾓坐标系。
·第3个轴⼀般被称为z轴。⼀般情况下,3个轴互相垂直。
·任意2个轴可以组成⼀个平⾯,我们⼀般称为XY平⾯,XZ平⾯,YZ平⾯,每个平⾯⼜与另⼀个轴相垂直。我们可以认为这3个平⾯是3个2D笛卡尔空间。
·在3D中,我们⽤(x,y,z)来表⽰⼀个点。坐标的每个分量分别代表了该点到yz,xz,xy平⾯的有符号距离。
5.左⼿坐标系与右⼿坐标系
·z轴⽅向的确定有2种⽅式:左⼿坐标系与右⼿坐标系。
·左⼿坐标系:伸开左⼿,⼤拇指指向X轴正⽅向,⾷指指向Y轴正⽅向,其他三个⼿指指向Z轴正⽅向。
·右⼿坐标系:伸开右⼿,⼤拇指指向X轴正⽅向,⾷指指向Y轴正⽅向,其他三个⼿指指向Z轴正⽅向。
·旋转正⽅向不同:左⼿坐标系:顺时针。右⼿坐标系:逆时针。
·3D笛卡尔坐标系:右⼿坐标系
·OpenGL:右⼿坐标系
·Direct3D:左⼿坐标系
·Unity3D:左⼿坐标系(世界坐标系),即+x, +y, +z分别指向右⽅,上⽅和前⽅。
第⼆章:Unity中的⼏种坐标系
1.介绍
·在不同的情况下使⽤不同的坐标系更加⽅便,所以在Unity中有多种坐标系:
·1.全局坐标系 World Coordinate System
·2.局部坐标系 Local Coordinate System
·3.屏幕坐标系 Screen Space
·4.视⼝坐标系 ViewPort Space
2.全局坐标系
·全局坐标系是⽤于描述场景内所有物体位置的⽅向的基准,也称为世界坐标系。
·在Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各⾃的位置的。
·可以使⽤transform.position来获取游戏对象的世界坐标。
3.局部坐标系
·局部坐标系也称为模型坐标系或物体坐标系。
·每个物体都有⾃⾝独⽴的物体坐标系。当物体移动或改变⽅向时,和该物体相关联的坐标系将随之移动或改变⽅向。
·模型Mesh保存的顶点坐标均为局部坐标系下的坐标,这样移动模型时,顶点坐标是不变的。
·transform.localPosition(本地坐标)可以获得物体在⽗物体的局部坐标系中的位置点。
·⽗⼦关系,⼦物体以⽗物体的坐标点为⾃⾝的坐标原点。
·
如果该游戏物体没有⽗物体,那么transform.localPosition获得的依然是该物体在全局坐标系中的坐标。
·如果该物体有⽗物体,则获得是在其⽗物体的局部坐标系中的坐标。
·检视视图中显⽰的为localPosition的值。
4.屏幕坐标系
·屏幕坐标系是建⽴在屏幕上的⼆维坐标系。
·以像素来定义的,屏幕的左下⾓为(0,0),右上⾓为(Screen.width, Screen.height),z轴的坐标是相机的世界坐标中z轴坐标的负值。
·⿏标位置坐标属于屏幕坐标,通过usePosition可以获得该位置的坐标。
·⼿指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个⼿指触摸屏幕时⼿指的坐标。
5.视⼝坐标系
·视⼝坐标系是将Game视图的屏幕坐标系单位化,左下⾓(0,0),右上⾓(1,1)。z轴的坐标是相机
的世界坐标中z轴坐标的负值。
·利⽤⽐例可以⽅便地控制点在屏幕内的位置,⽽不⽤理会屏幕的实际⼤⼩变化,常⽤于⾃适应。
6.坐标系之间的关联与相互转换
·1.全局坐标系和局部坐标系
·关联:
transform.Translate(translation:Vector3, relativeTo: Space = Space.Self);
·沿着translation的⽅向移动|translation|的距离,其结果将应⽤到relativeTo坐标系中。如果relativeTo为空,则默认为局部坐标系。【注意】:如果物体本⾝发⽣了旋转,局部坐标系和世界坐标系的x轴⽅向就不⼀样了。
·转换:
·Transform.TransformPoint(Vector3 position) :将⼀个坐标点从局部坐标系转换到全局坐标系。
·Transform.InverseTransformPoint(Vector3 position):将坐标点从全局坐标系转换到局部坐标系。
·Transform.TransformDirection(Vector3 direction):将⼀个⽅向从局部坐标系转换到全局坐标系。
·Transform.InverseTransformDirection(Vector3 direction):将⼀个⽅向从全局坐标系转换到局部坐标系。
·Transform.TransformVector(Vector3 vector):将⼀个向量从局部坐标系转换到全局坐标系。
·Transform.InverseTransformVector(Vector3 vector):将⼀个向量从全局坐标系转换到局部坐标系。
·其他:
·Transform.forward, Transform.right, Transform.up:当前物体的物体坐标系的z轴,x轴,y轴在世界坐标系上的指向。
【注意】:使⽤Translate⽅法的时候⽤Space.World,如果默认是Space.Self的话,还要进⾏⼀次转换。
·Vector3.forward ,(0,0,1)的缩写。在transform.Translate()中使⽤时,如果不表明坐标系,则为物体的局部坐标,即物体⾃⾝的正前⽅。
·Vector3.right,(1,0,0)的缩写。·Vector3.up ,(0,1,0)的缩写。
·2.屏幕坐标系与全局坐标系
unity3d入门·转换:
·Camera.ScreenToWorldPoint(Vector3 position): 将屏幕坐标转换为全局坐标。
·Camera.WorldToScreenPoint(Vector3 position):将全局坐标转换为屏幕坐标。
·3.屏幕坐标系与视⼝坐标系
·转换:
·Camera.ScreenToViewportPoint(Vector3 position):将屏幕坐标转换为视⼝坐标。
·Camera.ViewportToScreenPoint(Vector3 position):将视⼝坐标转换为屏幕坐标。
·4.全局坐标系与视⼝坐标系
·转换:
·
Camera.WorldToViewportPoint(Vector3 position):将全局坐标转换为视⼝坐标。
·Camera.ViewportToWorldPoint(Vector3 position):将视⼝坐标转换为全局坐标。
第三章:向量的基本概念
1.向量的定义
·在数学中,向量(也称为⽮量),是指具有⼤⼩和⽅向的量。
·向量的⼤⼩就是向量的长度,也叫做模。向量的⽅向描述了空间中向量的指向。
·在数学中,书写向量时,通常⽤⽅括号将⼀列数括起来,如[1,2,3]。
·⽔平书写的向量叫做⾏向量,垂直书写的向量叫做列向量。上⾯的向量可以书写成列向量: 。
·通常,我们⽤x,y来代表2D向量的分量,⽤x,y,z来代表3D向量的分量。
·向量中的数表达了向量在每个维度上的有向位移。
2.点和向量的关系
·点(Point):点中的数表⽰了⼀个位置,它没有⼤⼩、⽅向的概念。
·在笛卡尔坐标系,我们可以使⽤2个或3个实数来表⽰⼀个点的坐标。在2D空间中,⽤P=(Px,Py)来表⽰⼀个点的坐标。在3D空间中,⽤P=(Px,Py,Pz)来表⽰。
·向量(Vector):向量中的数表⽰了向量在每个维度上的有向位移。它可以形象化地表⽰为带箭头的线段。箭头所指:代表向量的⽅向。线段长度:代表向量的⼤⼩。
·在坐标系中,可以使⽤v = [x, y]来表⽰⼀个2维向量,⽤v = [x, y, z]来表⽰⼀个3维向量。
3.Unity中的点和向量
·在Unity中,只有Vector2、Vector3类型,没有Point2、Point3类型。
·Vector2类型可以⽤来表⽰2D向量和点。Vector3类型可以⽤来表⽰3D向量和点。
·Transform.position表⽰⼀个点,即游戏物体在世界坐标系中的点。
·Transform.forward表⽰⼀个向量,即当前物体的物体坐标系的z轴在世界坐标系上的指向。
·在Unity中,点和向量都是以(x,y,z)的形式表⽰。
·当我们想让游戏物体处于某个位置时,我们可以使⽤Vector3类型来表⽰这个点的位置坐标。
·当我们想让游戏物体沿着某个⽅向以⼀定的速度移动时,我们可以使⽤Vector3类型来表⽰速度的向量值,即速度的⼤⼩和⽅向。
·当我们想计算2个游戏物体之间的距离时,实际上计算的就是以这2个游戏物体为起点和终点的向量的长度。
第四章:向量运算
1.零向量
·零向量是⾮常特殊的⼀个向量,它是唯⼀⼀个⼤⼩为0的向量,也是唯⼀⼀个没有⽅向的向量。
·2D零向量表⽰为(0,0),3D零向量表⽰为(0,0,0)。
·在Unity中,⽤来表⽰3D零向量。
2.负向量
·每个向量都有⼀个负向量,满⾜条件:⼀个向量和它的负向量相加等于零向量。
·向量变负,将得到⼀个和原向量⼤⼩相等,⽅向相反的向量。
·(2,-3,3)的负向量为(-2,3,-3)。即将向量的每个分量都变负。
3.向量的长度
·向量的长度即向量的⼤⼩或者向量的模。
·向量的⼤⼩就是向量各分量平⽅和的平⽅根。
·对2D向量⽽⾔,可以构造⼀个以该向量为斜边,以x,y分量的绝对值为直⾓边的直⾓三⾓形。可以根据勾股定理得到斜边的长度,即向量的长度。
·2D向量的长度:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论