初识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 (-)纹理过滤(Texture Filtering)