从渲染管线学 GLES2.0(一)----初识渲染管线

1、什么是 OpenGL

OpenGL 是一种应用程序编程接口(API),它是一种可以对图形硬件设备特性进行访问的软件库。

OpenGL 被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或者窗口系统的前提下,在多种不同的图形硬件系统上,或者完全通过软件的方式(如果当前系统没有图形硬件)实现 OpenGL 的接口。OpenGL 自身并不包含任何执行窗口任务或者处理用户输入的函数。事实上,我们需要通过应用程序所运行的窗口系统提供的接口来操作这类操作。与此类似,OpenGL 也没有提供任何用于表达三维物体的模型,或者读取图像文件的操作。这个时候,我们需要通过一系列几个图元来创建三维空间的物体。

2、什么是 OpenGL ES

OpenGL ES 是以满足早期的嵌入式设备的需要,比如移动电话和机顶盒。OpenGL ES 的最初版本 1.0 版源自 OpenGL 的 1.3 版本,并且很快扩展到 OpenGL ES 的 1.1 版本,它是基于 OpenGL 的 1.5 版本,这个版本在带有固定功能图形硬件的手机上得到了很大的普及。

随着移动图形硬件变得更强大,主要由于可编程着色器,这促使需要一个新的 OpenGL ES 版本,OpenGL ES2.0 版基于 OpenGL 2.0 版本。为了配合其简约的原则,支持仅用于处理图形的单个方法,该 API 使用两个顶点和片段着色器,切换到了一个完全基于着色器的渲染管线。OpenGL ES 2.0 版本已经成为非常有影响力的版本,它满足许多不同类型的设备的硬件要求。随着 OpenGL 4.1 版的发布,将 OpenGL ES 2.0 版的所有功能加入 OpenGL 中,使得 OpenGL ES 成为 OpenGL 的一个子集。

3、OpenGL ES2.0 渲染管线

GLES2.0 渲染管线如下所示,从应用程序接收数据,然后经过顶点输出、顶点着色器、图元装配、裁剪、面剔除和背面消隐、光栅化,片段着色器、测试混合八个步骤,最终到显示输出。

顶点输入:用户输入的顶点数据,包含顶点坐标、纹理坐标、颜色、法向量等信息,OpenGL ES 将所有的数据都保存到缓存对象(buffer object)中,它相当于由 OpenGL ES 维护的一块内存区域。当调用绘制命令来请求渲染几何图元时,就会将这些顶点数据打包发送到 OpenGL ES 服务端。

顶点着色器:对于绘制命令传输的每个顶点,OpenGL ES 都会调用一个顶点着色器来处理顶点相关的数据,顶点着色器可能会非常简单,例如,只是将数据复制并传递到下一个模块,也可能非常复杂,例如,执行大量的计算来得到顶点在屏幕上的位置,或者通过光照计算来判断顶点的颜色等。

图元装配:接收顶点着色器的输出数据,并根据 glDrawArrays、glDrawElements 指定的图元类型将顶点数据装配成指定的图元形状。

裁剪:顶点可能会落在视口之外,那么就需要将这些顶点数据通过裁剪剔除掉。

面剔除、视窗变换:面剔除会将背面看不到的三角形剔除掉,这里只会对三角形生效。视窗变换主要将 NDC 坐标转换为屏幕坐标。这里关于是先面剔除、还是先视窗变换,每个硬件厂商实现可能是不一样的,如果先面剔除,那么将一些背面的三角形剔除掉,然后视窗变换处理的顶点个数就会少一些,但是计算背面时会使用到浮点乘法,浮点乘法是比较耗时的。如果先进行视窗变换,那么面剔除使用到的就是定点乘法,并且计算出来的面积到后面光栅化也可以使用到。

光栅化:在光栅化之前,我们处理的都是单个顶点坐标,比如一个三角形的三个顶点,但是三角形内部还有一块很大的区域,光栅化的作用就是计算出顶点包含范围内的其它像素的属性。

片段着色器:对像素片段进行处理,确定像素输出颜色。

测试与混合:裁剪测试(ScissorTest)、深度测试(DepthTest)、模板测试(StencilTest)、混合测试(BlendTest)等操作,确定一个像素是否可见。

这里面没有提到几何着色器,是因为几何着色器在 OpenGL ES2.0 中不是可编程的。

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值