网站备份信息,wordpress cptui,wordpress自媒体模版,大连市建设工程招标信息网平面着色 Flatshading
Flat shading (平面着色)是一种简化渲染技术#xff0c;它在光栅化阶段将一个图元#xff08;primitive#xff09;的所有顶点赋予相同的颜色或其它输出变量的值。这些赋予的值来自于该图元的“引发顶点”#xff08;provoking vertex#xff09;。…平面着色 Flatshading
Flat shading (平面着色)是一种简化渲染技术它在光栅化阶段将一个图元primitive的所有顶点赋予相同的颜色或其它输出变量的值。这些赋予的值来自于该图元的“引发顶点”provoking vertex。
可以通过glProvokingVertex函数来控制选取哪个顶点作为引发顶点
void glProvokingVertex(enum provokeMode);其中provokeMode可以是以下两个枚举值之一
FIRST_VERTEX_CONVENTION在这种模式下一个多边形的第一个顶点的输出值会被用于所有其他顶点的平滑着色。LAST_VERTEX_CONVENTION这是OpenGL的默认设置意味着一个多边形的最后一个顶点的输出值将被用于整个图元的平滑着色。
在OpenGL着色语言GLSL中当定义用户自定义的顶点着色器输出时若想使某个输出变量进行平面着色处理可以在声明输出变量时使用flat限定符。例如
out flat vec4 flatColor;这意味着无论多边形内部如何插值所有组成该多边形的像素都将获得同一颜色值这个值就是由引发顶点计算得到的那个颜色值。平面着色所需的OpenGL状态只包含一个位即引发顶点模式初始值为LAST_VERTEX_CONVENTION。
例如假设我们有一个顶点着色器在其中定义了一个带有flat限定符的颜色输出
#version 330 corein vec4 vertexPosition;
in vec4 vertexColor;out flat vec4 flatVertexColor; // 使用 flat 限定符声明的输出变量void main() {gl_Position vertexPosition;if (vertexPosition.y 0.5) { // 假设y坐标大于0.5的顶点颜色为红色flatVertexColor vec4(1.0, 0.0, 0.0, 1.0); // 红色} else {flatVertexColor vec4(0.0, 0.0, 1.0, 1.0); // 蓝色}
}在这个例子中我们将根据顶点的位置信息决定输出的颜色。当使用平面着色时即使三角形内部有多个顶点最终渲染出来的颜色将是引发顶点在这种情况下默认是最后一个顶点的颜色。
如果我们在OpenGL代码中设置ProvokingVertex为LAST_VERTEX_CONVENTION那么在光栅化阶段三角形的每个像素都将采用其最后一个顶点计算出的flatVertexColor值。
// 设置引发顶点模式为默认值LAST_VERTEX_CONVENTION
glProvokingVertex(GL_LAST_VERTEX_CONVENTION);// 绘制三角形
glDrawArrays(GL_TRIANGLES, 0, 3);这样一来对于由三个顶点构成的三角形来说不论内部插值如何整个三角形都会呈现为引发顶点所对应的颜色。