OpenGL渲染管线之坐标系 (二)

本文图片引用自https://learnopengl-cn.readthedocs.io/

概述:

在OpenGL渲染的整个流程中,共涉及到这几个坐标系:局部坐标系(Object or model coordinates)、世界坐标系(World coordinates)、摄像机坐标系(Eye、Camera coordinates)、裁剪坐标系(Clip coordinates)、屏幕坐标系(Screen Coordinates)。

我们需要用到这几个矩阵:

模型矩阵(Model Matrix)、观察矩阵(View Matrix)、投影矩阵(Projection Matrix)。

坐标系与变换矩阵的关系:

局部坐标系 ——(模型矩阵)—— 世界坐标系 ——(观察矩阵)——摄像机坐标系——(投影矩阵)——裁剪坐标系

 各个矩阵及坐标系概述:

  1. 局部坐标系:局部坐标系是物体内部的坐标系,他描述的是这个物体内部各个组成部分之间的相互关系,每个物体都会有一个他自己的局部坐标系。例如:一个正方形我们可以使用四个顶点来定义,我们约定,该正方形的局部坐标系的原点在正方向中心,那么正方形的四个顶点分别为[0.5, 0.5],[-0.5, 0.5],[-0.5, -0.5],[0.5, -0.5](逆时针方向)。如果有第二个相同的但是在不同位置的正方形,那么四个顶点的局部坐标也完全相同。不同的在于世界坐标不同。

  2. 模型矩阵:将物体的坐标从局部坐标系转换到世界坐标系。上面的两个正方形的四个顶点的局部坐标完全一样,但是模型矩阵不一样,导致在世界坐标系中的位置不一样。如果Cube0在原点,那么Cube0的模型矩阵为E,Cube1的中心在X轴的1.0位置,那么就相当于将Cube0往X轴方向平移1.0距离,那个这个平移变换就是Cube1的模型矩阵,同理旋转缩放。

  3. 世界坐标系:描述所有物体的顶点之间的相对位置。

  4. 观察矩阵:将世界中的物体坐标转换到摄像机坐标系,用以模拟摄像机在世界的不同位置、以不同角度、不同视角观察世界。这里需要注意的是,摄像机坐标系的Z轴正方向对应的是摄像机屁股对应的方向,而不是镜头对应的方向。这样定义的好处是:Opengl屏幕坐标系的Z轴向屏幕外,当摄像器的Z轴和屏幕坐标系的Z轴方向也一样时便于计算,否则的话,转换过程都需要加上Z轴翻转,但是摄像机又需要向着屏幕内的物体,这样就导致了摄像机镜头向着屏幕里(Z轴负方向),摄像机屁股向着屏幕外(Z轴正方向)。

  5. 摄像机坐标系:以摄像机为原点,描述世界中所有物体的相对位置。

  6. 投影矩阵:将摄像机坐标系中的物体投影到裁剪空间,也即将3D投影到2D的过程。

  7. 裁剪坐标系:描述最终显示到屏幕上的物体的相对位置,但不是距离。该坐标系的XY轴与屏幕坐标系的XY轴在同一个平面上,不同的地方在于,当我们在OpenGL中设置了ViewPort后,ViewPort空间即可认为是屏幕空间,它的原点在ViewPort的左下角。这时我们需要经过平移、旋转、缩放等转换(Z轴不变)得到屏幕坐标系内的顶点坐标。

两种投影方式:

  1. 正射投影:平行投影,物体在投影面上的相对距离不会因为与投影面的距离的远近而改变。

  2. 透视投影:射线投影,距离越远的线段,在投影面上的距离越短。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值