笛卡尔坐标
一维坐标系
以一个点为原点,选定一个方向为正方向(相反的方向为反方向),以一定的距离为标尺建立一维坐标系。一维坐标系一般应用于描述在一维空间中的距离。
举个例子:一维坐标系好比一条拉直的电线(忽略长度),一只老鼠在电线上,对于这只老鼠来说,这个一维坐标系(电线)就是它的世界,只能沿着电线的方向向前或向后运动(当然也可以不动),这只老鼠这个时候是活在“一维”世界里。二维坐标系
百度百科:二维,两根的坐标轴,有平面直角坐标丶自然坐标丶极坐标等,研究平面运动时用。二维坐标系可以解释为在平面内两条相互垂直且有公共原点的数轴组成的坐标系即二维坐标系。
可以理解为:把两个互相垂直,原点重合的一维坐标系组成的新的坐标系为二维坐标系。
注:二维坐标系有多重情况,这只是二维坐标系中的其中。(以正负方向不同区别)
3. 三维坐标系
百度百科:三维笛卡儿坐标系是在二维笛卡儿坐标系的基础上根据右手定则增加第三维坐标(即Z轴)而形成的。
二维坐标的两个轴分别是x轴和y轴,三维坐标系是在二维坐标系上增加一个同时垂直x、y轴的z轴。三维坐标系分左手坐标系和右手坐标系两种,如下图。
三维坐标系
世界坐标系
百度百科:世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前画面上所有点的坐标都是以该坐标系的原点来确定各自的位置的。
好比在一个游戏场景中,游戏地图就相当于世界,给地图添加笛卡尔三维坐标系后能够通过坐标点来描述地图上的任何一个点的(相对原点)位置。确定坐标系(左手或右手坐标系)和原定后,能通过坐标来描述在地图上的每个点的位置(坐标)
物体坐标系
地图上的每个物体都有一个独立的坐标系,叫做物体坐标系。也许有同学会有英文,有了世界坐标系为啥还需要物体坐标系呢?物体坐标系有什么用途?小时候我们上体育课的时候,体育老师经常让我们左转、右转、后转等。这个时候我们的世界坐标(相对地球)没变,可是我们每次面对不同的方向都不一样,这个就是我们的物体坐标变了。世界坐标系能确定物体的坐标,有了物体坐标系我们还能确定物体的方向。
摄像机坐标系
摄像机坐标系是和观察者有密切关系的坐标系。通过摄像机坐标系,我们能确定在屏幕上显示的内容。
要把3D场景的事物显示到一个2D的屏幕上,需要一个摄像机,可是某个时刻,我们只能显示一个画面的事物。摄像机的位置,方向不同,所拍取的景也就不一样。
惯性坐标系
引入惯性坐标系的概念是为了辅助物体坐标系到世界坐标系的转换。物体坐标系和世界坐标系一样也是一个三维坐标系,而且有左手坐标系、右手坐标系之分。
当物体的方向不是正方向的时候,我们可以通过旋转把物体调为正方向。如果物体的坐标系原点不是在世界坐标系的原点,我们可以通过移动物体的位置来把物体移到原点。
惯性坐标系就是表示当物体的方向是正方向但是坐标不是在世界坐标系原点时成为惯性坐标系。
简单的线性变换
- 平移
通过改变物体的世界坐标系的x、y或者z值,使物体在世界坐标系上的位置发生变化成为平移。如下图:
其实在OpenGL上,是先确定物体的位置再在改位置绘制物体。
如上图,在绘制立方体之前先把它的y轴向上移动10个单位,可以执行以下代码:
glTraslatef(0.0f, 10.0f, 0.0f);
然后再绘制立方体:
glutWireCube(10.0f);
=====================
2. 旋转
绕着某个旋转轴对物体选择0-360度,使物体的物体坐标系旋转。旋转函数:
glRotatef(angle, x, y, z);
与平移一样,在OpenGL中,也是先通过旋转再绘图。如上图的代码为:
glRotatef(90.0f, 1.0f, 1.0f, 1.0);
glutWireCube(10.0f);
=====================
3. 缩放
缩放变换根据指定的因子,将所有顶点在三根轴的方向上都展宽,由此来增加对象的大小。缩放函数: