OpenGL ES渲染管线中我们目前经常用到的有两个Vertex Shaders
、Fragment Shaders
,另外有两个Geometry Shaders
、Compute Shaders
是后来加的、可选的、我们了解就好。其中顶点着色器主要用来处理顶点变换
和光照
,片元着色器主要用来给像素赋值颜色
。渲染管线的详细流程如下图:
Geometry stages (per-vertex operations)
这个阶段块主要关注顶点数据从初始状态(模型坐标系统)到最终状态(视口坐标系统)的转换
Vertex Data
:这是整个过程的输入数据。在这里,我们向管道提供几何图形的所有矢量数据:顶点、法线、索引、切线、二项式、纹理坐标,等等
Textures
: 当着色器出现时,这个新的顶点阶段输入是可能的。除了使我们的渲染更加多彩,纹理可以作为顶点和几何着色器的输入,例如,根据存储在纹理中的值置换顶点(位移映射技术)
Vertex shader
: 这个系统负责将顶点从其本地坐标系统(local coordinate system)转换到剪辑空间(clip space),通过应用适当的转换矩阵(模型、视图和投影)。
Clipping
:一旦元素的顶点进入所谓的裁剪空间(clip space),裁剪和丢弃这里的外部三角形要比在其他空间中更容易,计算成本也更低
Perspective division
:这个操作将我们的可视化体(一个截断的金字塔,通常称为截锥体)转换成一个规则的、规格化的立方体。
Viewport transform
:剪切体的近平面(规格化立方体)被转换并缩放到视口坐标。这意味着坐标将被映射到我们的视口(通常是我们的屏幕或 我们的窗口)。
Data is passed to the rasterizer
:这个步骤将顶点数据(图元的顶点)转换为离散表示(framebuffer)以进一步处理的阶段
Fragment stages (per-fragment operations)
Fragment shader
:这是为片元应用纹理、颜色和灯光计算的阶段
Post fragment processing
:这是进行混合、深度测试、裁剪测试、alpha测试等的阶段。在这个阶段,片段被合并、测试和丢弃,最终通过的片段被写入framebuffer。
附:关于 GLSL Essentials 这本书是英文的,建议大家购买正版,支持正版人人有责
[链接: https://pan.baidu.com/s/1pNmY17MUwsGbXooS18biyg 密码: bg0m
网友评论