1,Geometry 介绍
Geometry 位于pipeline中的Vertex 和Frag shader之间。Geometry 接收来自定点处理阶段的定点信息,并在本阶段作出相应处理,向片元处理阶段发射顶点。其发射定点的语法如下:
layout (triangles) in;
layout (triangle_strip, max_vertices = 3)out;
void main()
{
int n;
// Loop over the input vertices
for (n = 0; n < gl_in.length(); n++)
{
// Copy the input position to the output
gl_Position = gl_in[0].gl_Position;
// Emit the vertex
EmitVertex();
}
// End the primitive. This is not strictly necessary
// and is only here for illustrative purposes.
EndPrimitive();
}
第一行来指出Geometry 的运行时机,第2行指出Geometry的输出类型(这里需要对PIPELINE了解清楚)其中EmitVertex为发射定点的,由于在Geometry阶段要发送的顶点信息不止一个,因此每次执行EmitVertex后,顶点信息就会变成未定义的,EndPrimitive 为结束发射, 如果不调用以上2个API,则不会产生有效的顶点信息,会在Frag处理阶段把片元disgrad,这也算是culling技术之一。
2, Buffer 介绍
当在顶点处理阶段在CPU GPU之间来传递数据是我们通常用VAO来管理不同的顶点数据,如法线,顶点颜色以及其他用户自定义的顶点属性。顶点属性数据从CPU传入到GPU中,那么两者之间是怎样建立数据对应关系的呢?
有2中方式。方式一是通过layout(LOCATION = ?)变量。方式2是通过glBindAttribLocation来指定2者之间的数据对应关系。当然不管用哪种方式指定,都需要在CPU端
激活所用到的顶点属性缓存, 调用下属命令即可。
glVertexAttribPointer;
glEnableVertexAttribArray
3, 过程纹理介绍
4, layout 用法总结
当用于顶点处理时,用来表示是何种顶点属性,数据为输入数据。
当用于片园处理时,表示颜色输出到的FBO,数据为输出数据。
同样可以用于SHADERSTORATAGEBUFFER.
本文详细探讨了OpenGL与Shader在3D渲染领域的应用,包括顶点处理、片段处理、几何处理阶段的功能及作用,以及Buffer、布局(layout)用法、过程纹理、Geometry阶段的具体实现等内容,旨在帮助读者理解这些关键技术如何协同工作,以实现高效的3D图形渲染。

被折叠的 条评论
为什么被折叠?



