首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

OpenGL ES2学习札记(10)- Orthographic Projection

2013-10-13 
OpenGL ES2学习笔记(10)-- Orthographic ProjectionNDCs到目前为止,我们定义的顶点坐标全部都坐落在[-1, 1

OpenGL ES2学习笔记(10)-- Orthographic Projection
NDCs

到目前为止,我们定义的顶点坐标全部都坐落在[-1, +1]范围内,比如下面这四个点。这是因为OpenGL只知道如何处理这个范围内的顶点,这个范围被称作NDCs(Normalized-Device Coordinates)。

把绘制区域拉窄看看:

OpenGL ES2学习札记(10)- Orthographic Projection

虚拟坐标系

从上面的两幅截图可以看出,直接使用NDC有很大的问题,因为最终绘制出来的图形会随绘制区域的不同而大相径庭。为了解决这个问题,我们不直接使用NDC,而是使用一个考虑了绘制区域纵横比(Aspect Ratio)的虚拟坐标空间(VCS,Virtual Coordinate Space),然后将VCS里的坐标转换到OpenGL所能理解的NDC上。完成这种变换的,是一种叫做Orthographic Projection的投影矩阵。

代码和效果

在OpenGL Console里执行下面的脚本:


OpenGL ES2学习札记(10)- Orthographic Projection   OpenGL ES2学习札记(10)- Orthographic Projection

可以看到,无论绘制区域怎样变化,我们绘制的正方形始终都还是正方形 :)

代码解释

如果宽是320,高是480的话,虚拟坐标空间将变成下面这样:
OpenGL ES2学习札记(10)- Orthographic Projection

  uniform mat4 u_Matrix;  attribute vec4 a_Position;    void main() {    gl_Position = u_Matrix * a_Position;  }
Vertex Shader将投影矩阵和顶点位置向量相乘,最终得到了想要的效果。


热点排行