OpenGL渲染管线

Opengl管线流程为:

一开始为几何数据,例如顶点,几何图元,首先通过一系列的着色器处理他们,例如顶点着色器,镶嵌着色器,最后的几何着色器。光栅化为为所有的图元创建片段在clipping region内。并为每一个生成的片段执行fragment shader.

vertex shader和fragment shader是必须的,tessellation shader和geometry shader 是可选的。

下面详细讲解每个阶段。

1.为opengl准备数据

opengl要求数据都储存在buffer object中,buffer object是opengl管理的内存块。

其中一个方法是使用glNameBufferStorage().

2.发送数据给opengl

缓冲区初始化完成后,通过调用opengl的绘图函数请求图元的渲染。例如glDrawArrays().    


Vertex shading 

由顶点发出请求,vertex shader就会被调用去处理顶点数据。取决于其他预光栅化着色器是否被**

vertex shader可能非常简单,只是在处理阶段传送数据,叫做past-through shader;

  较为复杂的情况,vertex shader进行多种计算,计算顶点的屏幕位置,叫transformation matrices

,使用灯光计算决定顶点颜色,或其他很多技术。

通常,一个复杂的应用包含很多vertex shader,但一次只能**一个。    

Tessellation Shading

vertex shader处理完顶点数据,在**情况下,Tessellation shader阶段会继续处理这些数据,  

曲面细分使用补丁描述物体的形状,增加面元的数量,提供更好看的模型。

tessellation shading包含两个阶段,处理补丁数据和生成最终形状。


Geometry shading

下一个阶段是几何着色器,允许对独立的几何图元记性额外的处理,在光栅化以前。

这个着色阶段是可选的,但是很强大。


Primitive Assembly

前面的阶段都在处理顶点,顶点数据怎么组织成几何面元并送入内部的OpenGL,原始组装阶段处理

顶点数据与原始图元,为折叠和光栅化做准备。


Clipping

偶尔,顶点可能会在视口的外面,OpenGl自动处理视口外的像素,让他们消失。


Rasterization

剪裁完以后,更新的图元会送入光栅器生成几何片段。光栅器的工作是决定屏幕的那个位置覆盖那个特定的几何

,如点,线,三角形。知道了这些位置和顶点数据,光栅器线性插值这些数据并送入fragment shader。

处理片段会发生在下面两个阶段,片段着色器和预片段操作。

光栅化开启片段的生命,决定最终片段的颜色,所有的处理可以加在片段上。


Fragment Shading

最终的操作是片段着色器,决定片段最终得的颜色和深度值,(下一个阶段可以更改颜色),片段着色器功能很强大,可以通过

纹理映射增加颜色,如果一个片段不应该被绘制,片段着色器也会终止他的处理,叫做fragment discard.

一个非常有用的区分vertex shader和fragment shader的区分方法:vertex shading(包括tessellation,geometry shading)

决定面元在屏幕上显示的位置。fragment shading决定片段显示的颜色。


Per-Fragment Operations

在这个阶段,片段的可见度取决于深度信息,z-buffering和stencil testing。


相关文章:

  • 2021-05-09
  • 2022-02-25
  • 2021-09-07
  • 2021-11-02
猜你喜欢
  • 2021-11-28
  • 2022-01-05
  • 2021-07-20
  • 2021-09-18
  • 2021-07-03
相关资源
相似解决方案