前端之家收集整理的这篇文章主要介绍了
OpenGL—渲染管线,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
简介:
渲染就是将3D世界中的物体显示到2D平面中的一个过程。学习OpenGL渲染的机制就是学习如图所示的几个关键部分。
在OpenGL ES 1.0 版本中,只支持固定管线,而在OpenGL ES 2.0后支持可编程管线,即在渲染的过程中不再是对开发人员透明的,可以通过一定的操作来实现更为复杂的功能。如图灰色部分(Vertex Shader和Fragment Shader)即为可编程部分,通过编写glsl脚本语言来控制OpenGL的渲染过程。
Vertex Arrys/Buffer Objects
即用户输入数据,如绘制三角形等输入的顶点信息。
VertexShader
可编程脚本(GLSL),用户可以通过编写shader脚本来控制GPU的运行,从而具有很强的灵活性。
OpenGL程序通过输入需要绘制图形的顶点信息,对于每个输入的顶点都会进入这个顶点着色器,所以通过顶点着色器将控制每个顶点的信息。由于顶点着色器是每个顶点相对独立运行的,所以无法在顶点着色器中访问关联的顶点等信息。
在顶点着色器中主要完成的工作就是将最终要显示的顶点通过模型视图投影矩阵变换,输出到gl_Position内置变量中,也就是说最后gl_Position保存的顶点是裁剪坐标(Clip Coordinates),之后只需要将顶点坐标进行裁剪和视口转换即最终用户空间看到的坐标。
Primitive Assembly
图元装配,即将需要绘制的图形组装成最后的形状。由于在前个阶段都是以顶点的形式存在的,所以这个阶段即根据需要绘制的图形,组装成图形的轮廓。接着将为这个轮廓填色
Rasterization
光栅化阶段,也就是将上面图元装配好的轮廓进行填色,根据用户设置的着色器模型来处理(glShadeModel)。如果设置为GL_SMOOTH,则将会进行插值计算,是的看起来是一个过渡的过程。如果设置为GL_FLAT,则除了顶点外,其他都是用设置的颜色进行填充。
TextureMemory
纹理数据,用于对图形进行纹理贴图。首先需要将外部图片的信息加载(glTexImage2d等函数)到OpenGL的纹理缓冲区中(这部分的操作是cpu完成的),接着通过opengl程序设置问题的UV坐标,即可以理解为纹理的贴图顶点坐标(与图形坐标一起输入在顶点着色器中)。
FragmentShader
即片断着色器或称为像素着色器更为适合。这部分也是用户可以通过编写glsl的着色器脚本,来控制最后需要显示的颜色。 片断着色器处理的是每个像素的着色过程,也就是说每个像素为其填色的时候,将会进入到此阶段,完成着色。在片断着色器中最重要的变量为gl_FragColor,即最后显示的颜色,通过为每个像素赋值。