初识OpenGL (-)坐标系统(Coordinate System)

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识OpenGL (-)坐标系统(Coordinate System)相关的知识,希望对你有一定的参考价值。

1. 5个不同的坐标系统

  • 局部空间(Local Space,或者称为物体空间(Object Space))
  • 世界空间(World Space)
  • 观察空间(View Space,或者称为视觉空间(Eye Space))
  • 裁剪空间(Clip Space)
  • 屏幕空间(Screen Space)

1.1 5种坐标

  • 局部坐标(Local Coordinate)

顶点坐标起始于局部空间(Local Space),局部坐标对象相对于局部原点的坐标,也是物体起始的坐标。

  • 世界坐标(World Coordinate)

处于一个更大的空间范围。这些坐标相对于世界的全局原点,它们会和其它物体一起相对于世界的原点进行摆放。

  • 观察坐标(View Coordinate)

又称摄像机(Camera)、摄像机空间(Camera Space)、视觉空间(Eye Space)

观察矩阵(View Matrix),用来将世界坐标变换到观察空间,一系列的位移和旋转的组合来完成,平移/旋转场景从而使得特定的对象被变换到摄像机的前方

  • 裁剪坐标(Clip Coordinate)
  • 屏幕坐标(Screen Coordinate)

2. 步骤

step1. local->world

模型矩阵(Model)

step2. 世界坐标变换为观察空间坐标,使得每个坐标都是从摄像机或者说观察者的角度进行观察的。

观察矩阵(View)

step3. 投影到裁剪坐标。裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上。

  • 投影矩阵(Projection)
    将顶点坐标从观察变换到裁剪空间,它指定了一个范围的坐标,比如在每个维度上的-1000到1000。

  • 观察箱(Viewing Box)

由投影矩阵创建,又称为平截头体(Frustum),每个出现在平截头体范围内的坐标都会最终出现在用户的屏幕上。将特定范围内的坐标转化到标准化设备坐标系的过程(而且它很容易被映射到2D观察空间坐标)被称之为投影(Projection),因为使用投影矩阵能将3D坐标投影(Project)到很容易映射到2D的标准化设备坐标系中。

  • 两种形式
    正射投影矩阵(Orthographic Projection Matrix)、透视投影矩阵(Perspective Projection Matrix)。

step4. 裁剪坐标变换为屏幕坐标

使用一个叫做视口变换(Viewport Transform)的过程。视口变换将位于-1.0到1.0范围的坐标变换到由glViewport函数所定义的坐标范围内。

  • 透视除法(Perspective Division)
    将位置向量的x,y,z分量分别除以向量的齐次w分量;透视除法是将4D裁剪空间坐标变换为3D标准化设备坐标的过程。

(这一步会在每一个顶点着色器运行的最后被自动执行)

step5. 最坐标将会送到光栅器,将其转化为片段

被映射到屏幕空间中------使用glViewport中的设定,并被变换成片段

以上是关于初识OpenGL (-)坐标系统(Coordinate System)的主要内容,如果未能解决你的问题,请参考以下文章

初识OpenGL (-)坐标系统(Coordinate System)

初识OpenGL (-)坐标空间

初识OpenGL (-)坐标空间

初识OpenGL (-)纹理过滤(Texture Filtering)

初识OpenGL (-)纹理过滤(Texture Filtering)

初识OpenGL (-)纹理过滤(Texture Filtering)