OpenGL学习笔记(四)高级OpenGL(2)

高手,打扰一下,OpenGL学习笔记(四)高级OpenGL(2)
最新回答
为你╰我宁愿放下

2024-09-21 09:39:36

高级OpenGL学习内容包含多个关键部分:数据导入、高级GLSL、几何着色器、法线可视化、实例化渲染以及绘制模型。下面将对每部分进行简化阐述。

数据导入与缓冲:数据从外部导入至OpenGL缓冲,用于顶点分批属性操作。

高级GLSL:通过绑定点与Uniform块实现数据管理。在着色器中声明Uniform块,并在第二步中设置绑定点与创建Uniform缓冲对象(UBO)以存放数据,如观察矩阵与投影矩阵。在第三步,将矩阵传入UBO,最后效果与之前一致,但观察矩阵与投影矩阵打包至单个UBO中传输,提高了效率。

几何着色器(GS)画房子:通过定义几何着色器,从顶点着色器输入顶点信息,通过接口块打包数据,并定义顶点位置。在GS中,一个顶点被转化为多个顶点,使用 EmitVertex 和 EndPrimitive 函数实现输出。在着色器中声明接口块,并在GS中传入颜色信息,使得4个顶点可绘制出更多三角形,通过调整颜色和位置实现不同的效果。

爆破模型(挤出命令):在GS中得到法线信息,并定义爆炸方法。通过设置方向,使用sin+1/2将值从[-1~1]映射到[0~1],在顶点为起点,法线为方向上输出移动效果。在主函数中调用GS进行渲染。

法线可视化:在主代码中使用两个着色器,传递矩阵信息,法线着色器声明法线信息。在进行爆破模型时,使用模型提供的法线并转换至观察空间,优化渲染效果。GS在法线方向上生成线条,实现法线可视化。

实例化渲染:通过实例化减少DrawCall使用,将多个物体一次渲染。定义顶点属性与fs,设置顶点着色器,创建位移向量,用gl_InstanceID索引offsets数组获取每个实例的偏移向量。在主代码中声明实例化缓冲,存储位移向量,设置顶点属性指针并更新顶点属性。

实例化数组与小行星绘制:在主函数中声明模型矩阵数组,循环绘制行星和岩石。通过实例化数组优化绘制方式,减少渲染次数。在VS中声明实例化数组,设置顶点属性指针,进行渲染设置。

这些高级OpenGL技术通过数据优化、高效着色器编程、几何着色器应用以及实例化渲染等手段,显著提高了图形渲染效率与质量,是深入学习OpenGL不可忽视的进阶内容。