【译】理解webgl渲染管线

535 阅读2分钟

作者:Sumeet Arora

书名:WebGl Game Development

下面的流程图表述了webgl渲染管线在二维屏幕上渲染任意物体所需要执行的操作。

2cc284fa63c893f8cf74f89c4f7ee0f.jpg 前两个步骤(模型视变换和投影变换)在顶点着色器中执行。物体的每个顶点展示在屏幕上,需要经过本地坐标系变换和观察者坐标系变换。不在可视区域的顶点将会被裁剪(透视除法)。视变换决定了最终处理对象的大小和位置。比如,物体是否应该被放大或缩小。

当前gpu使用了一个可编程渲染管线。早期的图形显卡不允许我们直接操作顶点,但是有内建的函数旋转或缩放这些顶点。

可编程渲染管线给予我们充分的灵活性去修改物体的顶点。我们可以编写函数去控制我们如何使用顶点着色器和片元着色器去渲染我们的物体。下面的流程图描述了可编程渲染管线的不同组件。我们将在下一节详细讨论这些。

9ebb270608c0fed3661b7def5e4ac0e.jpg

帧缓存

一个图形加速器是一种特定的旨在绘制图形的硬件。它被分配了内存区域去维护显示屏上的内容。

每个可见像素由内存中的一些字节表示,我们称作显存。这个内存每秒会刷新数次以保证屏幕的流畅。图形加速器也提供了离屏内存,仅仅用来存储数据。显存和离屏内存由操作系统分配。webgl或者opengl所能获得的内存也由window操作系统控制。这里有两个函数调用集合将webgl绑定到特定的系统。这套调用集合支持分配和清理图形内存,也包括分配清理称作图形上下文(维护webgl状态)的数据结构。作为webgl渲染结果被修改的显存区域叫做帧缓存。默认帧缓存由windows操作系统提供。它是将要展示在显示屏上的绘制面。去创建webgl绘制面的调用让你能够以像素为单位来定义面的宽度和高度。无论面是否使用了颜色,深度和模板缓存。在绘制显示在屏幕上的面时使用帧缓存是有效的。然而当我们需要渲染纹理,我们需要使用离屏帧缓存。

【译文完】