美文网首页
OpenGL 坐标系理解

OpenGL 坐标系理解

作者: 淡定的笨鸟 | 来源:发表于2019-05-15 10:55 被阅读0次

    本篇记录一下对OpenGL中坐标系的理解

    抛出问题

    我们平时玩过的3D游戏,一些人物模型、物体模型等都是以3D的效果呈现在玩家面前,而计算机或手机屏幕实际上是2D的坐标系,那么底层是如何让2D的坐标系呈现出3D的效果呢?这就是我们接下来要探索的。

    3D图形学下的坐标系

    在3D图形学中常用的坐标系有以下4种

    • 世界坐标系
      是绝对坐标系,所有物体的坐标点都可以以该坐标系为原点确定其位置。
    • 物体坐标系
      每个物体都有自己独立的坐标系,为什么要有物体坐标系呢?假设在空间坐标系中有一个长方体,此时想把长方体向左旋转一下,在长方体的物体坐标系操作远比直接在世界坐标系中操作来的简单;而如果想把长方体向左平移一下,则在世界坐标系上操作简单一些,在世界坐标系中操作,针对的是长方体的坐标系。
    • 惯性坐标系
      惯性坐标系和物体坐标系有相同的原点,但它的坐标轴平行于世界坐标系,为什么会有惯性坐标系呢?因为从物体坐标系到惯性坐标系只需要旋转,从惯性坐标系到世界坐标系只需要平移。
    • 摄像机坐标系
      从本意上理解,就是从三维空间的任意方位看物体时,以视觉为原点的坐标系,如图所示


      摄像机坐标系

      世界坐标系、物体坐标系和惯性坐标系的图示如下


      世界坐标系、物体坐标系和惯性坐标系

    OpenGL下坐标系的变换过程

    这些不同的坐标系需要经过转换有以下几个原因
    1、OpenGL 希望每次顶点着色后,我们的可见顶点都为标准化设备坐标(Normalized Device Coordinate,NDC)。也就是说每个顶点的x,y,z都应该在−1到1之间,超出这个范围的顶点将是不可见的。

    2、OpenGL最终渲染的屏幕是2D的,我们为了逻辑和运算方便,物体描述通常是在3D立体空间中的。

    3、OpenGL是右手坐标系,而标准化设备坐标系是左手坐标系。

    我们在作图时会给图形设定坐标,这些坐标就是顶点数据,它会通过顶点着色器变换为标准化坐标系下的坐标,再通过光栅化转换为屏幕可以识别的二维坐标和像素。

    坐标变换全局图

    坐标系的变换过程是这样的,首先从物体坐标经过模型变换变成世界坐标,世界坐标经过视变换变成摄像机坐标,摄像机坐标经过投影变换变成裁剪坐标,裁剪坐标->(透视除法)->规范化坐标->(视口变换)->屏幕坐标。
    上述过程就是物体坐标的变换过程
    如图所示

    坐标变换全局图.png

    OpenGL只定义了上图中的后三个坐标系(裁剪坐标、规范化设备坐标、屏幕坐标),前三个坐标系(物体坐标、世界坐标、摄像机坐标)是为了用户方便而自定义的坐标系。
    模型变换、视变换、投影变换为重点,它们需要用户自己通过矩阵变换达到目的,这三步要在顶点着色器中完成。
    透视除法、视口变换是OpenGL自带的,无需用户操心,它们是在顶点着色器处理后的阶段完成的。

    未完待续。。。

    相关文章

      网友评论

          本文标题:OpenGL 坐标系理解

          本文链接:https://www.haomeiwen.com/subject/xunyaqtx.html