OpenGL3.3几何着色器
几何着色器
几何着色器的输入是一个图元(如点或三角形)的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而,几何着色器最有趣的地方在于,它能够将(这一组)顶点变换为完全不同的图元,并且还能生成比原来更多的顶点(我自己的理解就是几何着色器可以在顶点着色器那接受顶点之后,对顶点做相应变换,比如说由顶点通过位移延伸出更多顶点,或者让顶点平移旋转,从而让模型法生变化)
一个几何着色器的例子:
#version 330 core
layout (points) in;
layout (triangle_strip, max_vertices = 5) out;
in VS_OUT {
vec3 color;
} gs_in[];
out vec3 fColor;
void build_house(vec4 position)
{
fColor = gs_in[0].color; // gs_in[0] since there's only one input vertex
gl_Position = position + vec4(-0.2, -0.2, 0.0, 0.0); // 1:bottom-left
EmitVertex();
gl_Position = position + vec4( 0.2, -0.2, 0.0, 0.0); // 2:bottom-right
EmitVertex();
gl_Position = position + vec4(-0.2, 0.2, 0.0, 0.0); // 3:top-left
EmitVertex();
gl_Position = position + vec4( 0.2, 0.2, 0.0, 0.0); // 4:top-right
EmitVertex();
gl_Position = position + vec4( 0.0, 0.4, 0.0, 0.0); // 5:top
fColor = vec3(1.0, 1.0, 1.0);
EmitVertex();
EndPrimitive();
}
void main() {
build_house(gl_in[0].gl_Position);
}
layout (points) in;声明从顶点着色器输入的图元类型
图元值:
points:绘制GL_POINTS图元时(1)。
lines:绘制GL_LINES或GL_LINE_STRIP时(2)
lines_adjacency:GL_LINES_ADJACENCY或GL_LINE_STRIP_ADJACENCY(4)
triangles:GL_TRIANGLES、GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN(3)
triangles_adjacency:GL_TRIANGLES_ADJACENCY或GL_TRIANGLE_STRIP_ADJACENCY(6)
括号内的数字表示的是一个图元所包含的最小顶点数
<1>按点的定义顺序依次连接:图元类型参数–GL_POLYGON
<2>从第1个点开始,每三个点一组画一个三角形,三角形之间是独立的:图元类型参数–GL_TRIANGLES
<3>从第三个点开始,每点与前面的两个点组合画一个三角形,即线性连续三角形串:图元类型参数–GL_TRIANGLE_STRIP
<4>从第三个点开始,每点与前一个点和第一个点组合画一个三角形,即扇形连续三角形:图元类型参数–GL_TRIANGLE_FAN
layout (line_strip, max_vertices = 2) out;指定几何着色器输出的图元类型 第二个参数是可生成的最大顶点数
points
line_strip
triangle_strip
EmitVertex();
gl_Position中的向量会被添加到图元中
EndPrimitive()
所有发射出的(Emitted)顶点都会合成为指定的输出渲染图元
gl_in[0]目前理解的gl_in[0]是从顶点那获取的一个个点 具体怎么用还不了解
还有layout (points) in;
layout (triangle_strip, max_vertices = 5) out;这两个的具体填法也有待探究
上一篇: css title小技巧
下一篇: CSS3——知识点总结(学习笔记)