世界坐标系
世界坐标系,以人站立的位置为原点,右方为x 正方形,头顶为y的正方形,z的正方形为脑后(即人看向z的负方向)。如下图
因此,在用opengl绘制的图像时,加载的模型文件其实都是在原点的位置,在绘制游戏或者模型的时候就要将这些模型放置在不同的世界坐标系位置上,即称为绝对坐标。
绝对坐标
绝对坐标 就是我们要绘制的物体在世界坐标系里的坐标位置。
在绘制模型的时候,我们首先得设定模型的具体坐标,即世界坐标系的位置。这里和我们数学里用到的坐标系不一样,需要注意z和y的位置是相反的,很容易在设置位置的时候设置错误。
相机和视点
相机就类似与我们人的眼睛,三维世界那么大,我们人眼只能站在一个准确的地方去看这个世界。那人眼在看物体的时候,随着聚焦,就会有个目标点,这个目标就会焦点也成为视点。
因此opengl要渲染物体的时候,首先就得确定相机 和 视点的位置,即在世界坐标系里面的坐标。
屏幕坐标
屏幕坐标是以屏幕横方向为x,竖直方向为y,从屏幕指向外的方向为z方向。其实和世界坐标有着相同的方法,例如,我们对着电脑屏幕,电脑的横方向是x,y方向(朝上),z方向是从屏幕指向我们。当然我们这里不是需要知道坐标系规则,而是世界坐标系是如何变成屏幕坐标系的呢。这里就需要理解正交投影。
正交投影
请原谅我的画功,勉强看看吧。相机和视点连线构成人的视线,视角。近平面 和 远平面 为相机能看到的最近和 最远的距离。这里只要在原平面和近平面之间的物体都会投影在近平面上,是可见的,成为视景体,这里近平面可以理解为我们的屏幕。
确认屏幕坐标系
这里大家思考下,有了视线,我们知道了z坐标轴的方向,那么x、y的方向如何确定呢,因此这里需要设定我们头顶的向量,这里头顶指的是向上的向量,利用向上的向量 up 和 视线向量(z轴) ,2条直线构建一个平面。垂直这个面的方向为 x轴 ,再利用x轴和 视线轴 (z轴)叉乘就可以得到y轴坐标。如下图,再次请大家见谅,画功太差。
得到了屏幕坐标系后,就需要将世界坐标系中的点 投影到 屏幕坐标系中,然后利用中交投影,将场景中的点投影到屏幕 ,就完成了我们的渲染。
如果还是不了解,可以看接下来的,用glm设定projectMatrix,viewMatrix,modelMatrix来完成模型渲染,从代码角度来理解吧。