Real-Time 读书笔记(1)OpenGl 基础概念

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之间的数据传递,也可以用于不同pass之间的数据传递,在shader之中通过id来访问。
当在顶点处理阶段在CPU GPU之间来传递数据是我们通常用VAO来管理不同的顶点数据,如法线,顶点颜色以及其他用户自定义的顶点属性。顶点属性数据从CPU传入到GPU中,那么两者之间是怎样建立数据对应关系的呢?
       有2中方式。方式一是通过layout(LOCATION = ?)变量。方式2是通过glBindAttribLocation来指定2者之间的数据对应关系。当然不管用哪种方式指定,都需要在CPU端
       激活所用到的顶点属性缓存, 调用下属命令即可。
           glVertexAttribPointer;
           glEnableVertexAttribArray

3, 过程纹理介绍

一般来讲指的是柏林噪声,在渲染草地,天空,水,大理石,木纹等效果时会用到,对柏林噪声做不同的处理就可以生成不同的渲染效果。

4, layout 用法总结

layout用于声明全局变量,可用于GPU管线不同的阶段,来描述数据的特性。
当用于顶点处理时,用来表示是何种顶点属性,数据为输入数据。
当用于片园处理时,表示颜色输出到的FBO,数据为输出数据。
同样可以用于SHADERSTORATAGEBUFFER.

你可能感兴趣的:(图形,OpenGL,图形学)