本章描述片段着色器的更多细节。

固定功能片段着色器
在OpenGL ES 1.x版本有固定功能片段管线。这一小节主要讲如何用着色器实现传统的固定功能技术。
OpenGL ES 1.x版本传统的RGB组合函数:

举例A×B说明:
#version 300 es
precision mediump float;
uniform sampler2D s_tex0;
in vec2 v_texCoord;
in vec4 v_primaryColor;
layout(location = 0) out vec4 outColor;
void main() {
outColor = texture(s_tex0, v_texCoord) * v_primaryColor;
}
可以用片段着色器执行任何固定功能纹理组合设置的等价计算。
片段着色器概述

内建特殊变量
gl_FragCoord:保存片段的窗口相对坐标。
gl_FrontFacing:片段是正面图元的一部分则为true。
gl_PointCoord:可以在渲染点精灵时使用。
gl_FragDepth:在片段着色器中写入时,覆盖片段的固定功能深度值。
内建常量
const mediump int gl_MaxFragmentInputVectors = 15;
const mediump int gl_MaxTextureImageUnits = 16;
const mediump int gl_MaxFragmentUniformVectors = 224;
const mediump int gl_MaxDrawBuffers = 4;
const mediump int gl_MinProgramTexelOffset = -8;
const mediump int gl_MaxProgramTexelOffset = 7;
gl_MaxFragmentInputVectors:片段着色器输入的最大数量
gl_MaxTextureImageUnits:可用纹理图像单元的最大数量
gl_MaxFragmentUniformVectors:片段着色器内可以使用vec4统一变量项目的最大数量
gl_MaxDrawBuffers:多重渲染目标(MRT)的最大支持数量
gl_MinProgramTexelOffset:偏移参数支持的最大偏移量
gl_MaxProgramTexelOffset:偏移参数支持的最小偏移量
精度限定符
每个片段着色器必须声明一个默认精度符,详见第5章。
用着色器实现固定功能技术
多重纹理
多重纹理是片段着色器中非常常见的操作,用于组合多个纹理贴图。
纹理贴图常常用于存储反射指数和遮罩,以衰减和遮盖反射光的分布。
在典型的照明贴图处理中,基本贴图和照明贴图应该有一组单独的纹理坐标。
雾化
应用雾化是渲染3D场景的一种常用技术,可以用于减小绘图距离,消除靠近观看者的几何体的“突现”现象。
Alpha测试(使用Discard)
3D应用程序中使用的常见特效之一是绘制某些片段中完全透明的图元,这对于渲染链状栅栏的物体很有用。
Alpha测试允许你指定一个比较测试,如果片段的Alpha值和参考值得比较失败,该片段将删除。
用户裁剪平面
实现用户裁剪平面得关键是使用discard关键字。
小结
本章介绍了使用片段着色器的多种渲染技术,为后期的高级渲染技术做好准备。
网友评论