图形绘制过程(流水线)

图形绘制流水线体系结构

我们首先需要明白,图像都是通过一组图元组成,每个图元又包含一组顶点,所以所有的图像都是可以通过类似过程来进行处理,最后达到成像的目的,简单来说,就是顶点如何转变为像素的问题。
现有的常用技术是通过以下四步来解决,比较重要的是vertex shader以及fragment shader:

(1)顶点处理
总的来说,这个模块的主要功能是执行坐标变换、为了保留三维信息而做的投影变换和计算顶点的颜色值。
在成像过程中,有许多步骤可以看做是对象在不同坐标系下的表示之间的变换。对象的内部表示,不管是在观察坐标系下的还是在图形软件使用的其他坐标系下的,最终必须转换成在显示器坐标系下的表示。
在经过多次变换之后,最后还要进行一个投影变换。一般而言,当对象在流水线中被处理时,希望尽可能久地保留三维信息,因此,绘制流水线中的投影变换多少要比投影更一般。除了保持三维信息以外,还可以实现许多其他类型的投影。
对顶点颜色的指派可以简单到由程序指定一种颜色,也可以复杂到利用基于物理的真实感光照模型来计算,这样的光照模型考虑了对象的表面属性和场景中的特定光源。

(2)裁剪和图元组装
简单来说就是,把视线之外的图元全部去掉,最后输出可以成像的图元。
标准图形绘制流水线中第二个基本模块的任务是裁剪和组装图元。因为没有成像系统能够次对整个场景成像,所以我们必须进行裁剪。人类视网膜的尺寸是有限的,大约对应于90°的视域。照相机的胶片也是大小有限的,其视域可以通过选择不同的透镜来调节。
虚拟照相机的视域也是有限的,这是通过裁剪体( clipping volume )来体现的。裁剪体里面的对象的投影可以在图像里出现,而在裁剪体外面的对象则不被成像,我们说它们被裁剪掉了。跨越裁剪体边界的对象在图像中是部分可见的。
裁剪必须针对逐个图元进行,而不能针对逐个顶点进行。这样,在绘制流水线的这个阶段,在裁剪之前,必须把顶点组装成像线段和多边形这样的图元。所以,这个阶段的输出是一些其投影可以被成像的图元。

(3)光栅化
这一个步骤的目的是把用顶点表示的图元变成片元(携带自己信息的潜在像素)
光栅化会确定图元所覆盖的片段,利用顶点属性插值得到片段的属性信息。
由裁剪模块得到的图元仍然是用顶点表示的,为了生成帧缓存中的像素还必须做进一步处理。光栅化模块对每个图元输出一组片元( fragment )。可以把片元看做是携带自己信息的潜在像素,片元所携带的信息包括它的颜色、位置和深度信息。我们用片元来更新帧缓存中的对应像素并且在绘制流水线后面的阶段就可以确定某个片元是否位于其他片元的后面,这些片元都对应于同一个像素。
如果还想要细分的话,有着建立三角形和遍历三角形的阶段,前者计算计算每条边上的像素坐标,后者检查每个像素是被哪一个三角形网格所覆盖。当像素被三角形覆盖时,就会生成一个片元。在此阶段中,会根据上一个阶段的计算结果来判断一个三角形网格覆盖了哪些像素,并使用三角形网格三个顶点信息对整个覆盖区域的像素进行插值。

(4)片元处理
这一步理解起来比较简单,就是根据上一步传递过来的片元信息进行渲染的过程
绘制流水线的最后一个模块利用光栅化模块生成的片元来更新帧缓存中的像素。(这里需要根据输入来计算)如果应用程序生成的是三维数据,那么一些片元可能是不可见的,因为它们所定义的表面在其他表面的后面。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值