位置: 编程技术 - 正文
推荐整理分享OpenGL渲染管线(opengl渲染流程图),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:opengl的渲染管线,opengl渲染流程图,opengl渲染管线的工作流程,opengl渲染管线的工作流程,opengl渲染管线是什么,opengl渲染管线是什么,opengl渲染管线流程,opengl渲染管线流程,内容如对您有帮助,希望把文章链接给更多的朋友!
转载自: Ford在福特汽车公司采用的装配线方法,它也是OpenGL处理数据的方法。几何数据(顶点,直线和多边形)所经历的处理阶段包括求和基于顶点的操作,而像素数据(像素,图像和位图)的处理过程侧有所不同。在最终的像素数据写入到帧缓冲区之前,这两种类型的数据都将经过相同的最终步骤(光棚化和基于片断的操作)。下面,我们更为详细地介绍OpenGL渲染管线的一些关键阶段。
1 显示列表Display Lists任何数据,不管它所描述的是几何图形还是像素,都可以保存在显示列表(display list)中,供当前或以后使用。当然,我们也可以不把数据保存在显示列表中,而是立即对数据进行处理,这种模式也称为立即模式(immediate mode)。当一个显示列表被执行时,被保存的数据就从显示列表中取出,就像在立即模式下直接由应用程序所发送的那样。2求器Evaluators所有的几何图元最终都要通过顶点来描述。参数化曲线和表面最初可能是通过控制点以及成为基函数(Basic function)的多项式函数进行描述的。求职器提供了一种方法。根据控制点计算表示表面的顶点。这种方法是一种多项式映射,它可以根据控制点产生表面法线、纹理坐标、颜色以及空间坐标。3 基于顶点的操作Per-Vertex Operations对于顶点数据,接下来的一个步骤就是"基于顶点的操作",就是把顶点变换为图元。有些类型的顶点数据(例如空间坐标)是通过一个4*4 的浮点矩阵进行变换的。空间坐标从3D世界的一个位置投影到屏幕上的一个位置。如果启用了高级特性,这个阶段将更为忙碌。如果使用了纹理,这个阶段还将生成并变换纹理坐标。如果启用了光照,就需要综合变换后的顶点,表面法线,光源位置,材料属性以及其他光照信息进行光照计算,产生最终的颜色。4 图元装配Primitive Assembly图元装配的一个主要内容就是剪裁,它的任务是消除位于半空间(half-space)之外的那部分几何图元,而这个半空间是由一个平面所定义的。点剪裁就是简单地接受或拒绝顶点,直线或多边形剪裁则可能需要添加额外的顶点,具体取决于直线或多边形是如何进行剪裁的。在有些情况下,接下来需要执行一个称为透视除法(perspective division)的步骤。它使远处的物体看起来比近处的物体更小一些。接下来所进行的是视口(viewport)和深度(z 坐标)操作。如果启用了剔除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。取决于多边形模式,多边形可能被画成点的形式或者直线的形式。这个阶段所产生的结果就是完整的几何图元,也就是根据相关的颜色,深度(有时还有纹理坐标以及和光棚化处理有关的一些指导信息)进行了变换和剪裁的顶点。5 像素操作Pixel Operations在 OpenGL 的渲染管线中,和单路径的几何数据相比,像素数据所经历的流程有所不同。首先,来自系统内存的一个数组中的像素进行解包,从某种式(像素的原始式可能有多种)解包为适当数量的数据成分。接着,这些数据被缩放、偏移,并根据一副像素图进行处理。处理结果先进行截取,然后或者写入到纹理内存,或者发送到光棚化阶段。如果像素数据时从帧缓冲区读取的,就对他们执行像素转换操作(缩放、偏移、映射和截取)。然后,这些结果被包装为一种适当的式,并返回到系统内存的一个数组中。OpenGL 有一种特殊的像素复制操作,可以把数据从帧缓冲区复制到帧缓冲区的其他位置或纹理内存中。这样,在数据写入到纹理内存或者写回到帧缓冲区之前,只需要进行一道像素转换就可以了。6 纹理装配Texture AssemblyOpenGL 应用程序可以在几何物体上应用纹理图像,使它们看上去更为真。如果需要使用多幅纹理图像,把它们放在纹理对象中是一种明智的做法。这样,就可以很方便地在他们之间进行切换。有些 OpenGL 实现拥有一些特殊的资源,可以加速纹理的处理。这种资源可能是专用的,高性能的纹理内存。如果确实拥有这种内存,纹理对象可能会优先进行处理,以控制这种有限和宝贵的资源的使用。7 光棚化Rasterization光棚化就是把几何数据和像素数据转换为片断(fragment)的过程。每个片断方块对应用于帧缓冲区中的一个像素。把顶点连接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式,直线的宽度,点的大小,着色模型以及用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度。8 片断操作Fragment Operations在数据实际存储到帧缓冲区之前, 将要执行一系列的操作。这些操作可能会修改甚至丢弃这些片断。所有这些操作都可以被启用或禁用。第一个可能执行的操作时纹理处理。在纹理内存中为每个片断生成一个纹理单元(texel,也就是纹理元素),并应用到这个片断上。接着可能进行的是雾计算,然后是剪裁测试,alpha测试,模板测试和深度缓冲区测试(深度缓冲区用于消除被隐藏的表面)。如果一个片断无法通过一个启用的测试,它的连续处理过程可能会被中断。随后,将要执行的可能是混合,抖动,逻辑操作以及根据一个位掩码的屏蔽操作。最后,经过完整处理的片断就被绘制到适当的缓冲区,最终成为一个像素并到达它的最终栖息地。[置顶] 混合、反走样、雾效、多边形偏移 混合:介绍如何指定混合函数,它通过将源颜色和目标颜色混合,使场景的某些部分为半透明;反走样:反走样通过修改颜色来消除点、线、多边形边
[置顶] openGL学习笔记一:环境搭建 最近项目比较忙(每天凌晨才结束),所以cocos2dx的博客也没有更新了。感觉好堕落的说。最近打算学openGL,在这里做过学习笔记,有什么没有对的还是
[置顶] openGL学习笔记二:看看上一篇我们写的代码 哈哈,千呼万唤始出来,我们第二篇笔记新鲜出炉了(话说不是没隔多久么。。。。)呵呵,闲话不多说,我们来看看上一篇我们写的代码,知其然也
标签: opengl渲染流程图
本文链接地址:https://www.jiuchutong.com/biancheng/373206.html 转载请保留说明!友情链接: 武汉网站建设