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

本文详细探讨了OpenGL与Shader在3D渲染领域的应用,包括顶点处理、片段处理、几何处理阶段的功能及作用,以及Buffer、布局(layout)用法、过程纹理、Geometry阶段的具体实现等内容,旨在帮助读者理解这些关键技术如何协同工作,以实现高效的3D图形渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值