0
点赞
收藏
分享

微信扫一扫

OpenGL渲染管线


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。


举报

相关推荐

0 条评论