glsl内置变量

 

1. 顶点着色器内置变量

1.1 gl_VertexID

  • 类型int

  • 说明:返回当前顶点的索引(从 0 开始)。在使用顶点数组时,每个顶点都会有一个唯一的索引。

1.2 gl_InstanceID

  • 类型int

  • 说明:返回当前实例化渲染的实例索引。当进行实例化渲染时(即渲染多个相同的物体),该变量提供实例的编号。

1.3 gl_Position

  • 类型vec4

  • 说明:返回顶点在裁剪空间中的位置。在顶点着色器中,必须设置该变量以定义每个顶点的位置。它决定了顶点的位置以及如何在屏幕上显示。

1.4 gl_PointSize

  • 类型float

  • 说明:定义点精灵的大小。当使用点绘制时,该变量可以用来调整点的大小。

1.5 gl_FragCoord

  • 类型vec4

  • 说明:这是片段着色器中的一个内置变量,表示片段的位置,包含 x(窗口空间的水平坐标)、y(垂直坐标)、z(深度值)和 w(齐次坐标,通常为 1)。

1.6 gl_FrontFacing

  • 类型bool

  • 说明:指示当前处理的片段是否是前面朝向的。如果为 true,则表示当前片段是前面朝向的;如果为 false,则是后面朝向的。可以用来在片段着色器中处理正面和背面的颜色。

1.7 gl_TexCoord(已经过时,使用 gl_FragCoord 替代)

  • 类型vec4

  • 说明:这个变量在顶点着色器中用于传递纹理坐标,但它已被废弃,建议使用 gl_FragCoord 替代。

2. 片段着色器内置变量

2.1 gl_FragColor

  • 类型vec4

  • 说明:片段着色器的输出颜色。通常在片段着色器中用来设置每个片段的最终颜色值,gl_FragColor 被写入屏幕的像素位置。

2.2 gl_FragDepth

  • 类型float

  • 说明:设置片段的深度值。在深度测试时,片段的深度值会被与现有的深度值进行比较。如果它小于现有的深度值,片段将被保留。

2.3 gl_FragCoord

  • 类型vec4

  • 说明:返回当前片段在窗口坐标空间的位置。xy 是屏幕空间的坐标,z 是片段的深度值,w 通常是 1.0。

2.4 gl_PointCoord

  • 类型vec2

  • 说明:在点绘制模式下,片段着色器使用该变量来获取当前片段在点大小内的位置(坐标范围是 [0,1])。对于点精灵来说,这可以用来计算纹理坐标等。

3. 光栅化阶段相关内置变量

3.1 gl_ClipDistance

  • 类型float[]

  • 说明:用于在裁剪过程中存储裁剪平面的距离。在顶点着色器或几何着色器中,您可以设置 gl_ClipDistance 数组的元素来裁剪不符合条件的片段。

3.2 gl_ClipVertex

  • 类型vec4

  • 说明:该变量通常在几何着色器中设置。它用于指定裁剪空间中的顶点位置。

4. 管线状态信息

4.1 gl_MaxVertexAttribs

  • 类型int

  • 说明:返回当前平台支持的最大顶点属性数量。

4.2 gl_MaxVertexUniformVectors

  • 类型int

  • 说明:返回顶点着色器中每个程序可以使用的最大顶点着色器常量的数量。

4.3 gl_MaxFragmentUniformVectors

  • 类型int

  • 说明:返回片段着色器中每个程序可以使用的最大片段着色器常量的数量。

5. 内置常量和定义

5.1 PI

  • 类型float

  • 说明:圆周率常量,约等于 3.14159。

5.2 E

  • 类型float

  • 说明:自然对数的底数常量,约等于 2.71828。

5.3 MAX_VERTEX_ATTRIBS

  • 类型int

  • 说明:返回支持的最大顶点属性数量。

5.4 MAX_TEXTURE_IMAGE_UNITS

  • 类型int

  • 说明:返回最多支持的纹理单位数量。

6. 扩展变量(与渲染目标相关)

6.1 gl_Layer

  • 类型int

  • 说明:在多层渲染时,控制渲染目标的层。

6.2 gl_ViewportIndex

  • 类型int

  • 说明:指定当前渲染目标的视口索引。


总结

GLSL 提供了丰富的内置变量,帮助开发者在顶点着色器、片段着色器等阶段与 OpenGL 渲染管线进行交互。这些内置变量通常是为了提供渲染过程中需要的坐标、颜色、深度、法线等信息。例如,gl_Position 用于顶点着色器,定义顶点的空间位置,而 gl_FragColor 则用于片段着色器,指定片段的最终颜色。通过合理使用这些内置变量,您可以方便地控制图形渲染的各个方面。

posted @ 2025-05-12 19:03  SimoonJia  阅读(20)  评论(0)    收藏  举报