OpenGL ES

第八章 顶点着色器

2021-07-06  本文已影响0人  大旺旺的弟弟小旺旺

顶点着色器是对顶点,计算光照以及纹理坐标等相关的操作,第6章,“顶点属性、顶点数组和缓冲对象”,讨论了如何指定顶点属性和统一输入,并对OpenGL ES 2.0着色语言进行了很好的描述。在第7章“图元组装和光栅化”中,我们讨论了光栅化阶段如何使用顶点着色器的输出来生成每个片段的值,然后将这些值输入到片段着色器。这里,从顶点着色器的高级概述开始,包括它的输入和输出。然后,我们讨论OpenGL ES 2.0,然后我们通过讨论几个例子来描述如何编写顶点着色器。这些示例描述了一些常见的用例,

顶点着色器

顶点着色器提供了一种对顶点进行操作的通用可编程方法。顶点着色器的输入包括以下内容:

顶点着色器的输出称为可变变量。在图元光栅化阶段,为每个生成的片段计算这些变量的插值,并将其作为输入传递给片段着色器。

内置变量

顶点着色器的内置变量可以分为由顶点着色器输出的特殊变量统一状态(如深度范围)和指定最大值(如属性数量、变量数量和统一数量)的常数。

首先特殊变量

内置统一状态

顶点着色器中唯一可用的内置统一状态是窗口坐标中的深度范围。这是由内置的统一名称gl _ DepthRange给出的,它被声明为gl _ DepthRangeParameters类型的统一。

struct gl_DepthRangeParameters {
   highp float near; // near Z
   highp float far;  // far Z
   highp float diff; // far - near
}
uniform gl_DepthRangeParameters gl_DepthRange;

内置常量

顶点着色器中还有以下内置常量

const medump int GL _ maxvertices = 8;
const medump int GL _ maxverticalxuriormvector = 128;
const mid UMP int GL _ maxvarying vectors = 8;
const medump int GL _ maxverticaltextureimageunits = 0;
const average UMP int GL _ maxcombinationed texture units = 8;

内置常数描述了以下最大项:

精度限定符

精度限定符可用于指定任何基于浮点或整数的变量的精度。用于指定精度的关键字有低、中、高。此处显示了一些带有精度限定符的声明示例。

highp vec4        position;
varying lowp vec4 color;
mediump float     specularExp;

没有声明变量的精度,就会使用该类型的精度。

precision highp float;
precision mediump int;

浮点指定精度将基于浮点的所有变量的默认精度,如果都没有指定,那么就会使用int和float的默认精度的最高精度。
精度选择:

这将取决于正在执行的颜色计算的种类以及正在执行的操作所需的范围和精度。我们相信highp很可能是顶点着色器中大多数操作使用的默认精度,因此在下面的示例中使用highp作为默认精度限定符。

ES2.0顶点着色器限制

open el es着色器语言的限制,帮助开发者编写便捷式的顶点着色器。

顶点着色器的长度

没有办法在所有的open gl中实现查询顶点着色器支持的最大指令数量,指定计数超过顶点着色器的最大指令数,顶点着色器将无法编译。

上一篇下一篇

猜你喜欢

热点阅读