前言:Rasterizer做什么
本篇
简单地
讨论一个问题:
给出图元(三角形/线/点)的顶点坐标及颜色,DirectX 3D(D3D)/OpenGL(OGL)如何确定最终在屏幕上画出的结果?
从D3D Pipeline看[1],这些工作是由光栅化(Rasterizater)做的,光栅化是D3D/OGL Pipeline中关键的固定功能阶段,其前面的Shader经过基于Vertex/Patch/Geometry的处理后,以为图元基本单位,输出图元各顶点的位置坐标及各种属性(如颜色,纹理坐标等),交由Raster
(1)确定图元覆盖到的所有屏幕像素(2)插值计算出这些像素的属性
。
Raster为这些像素触发像素着色器(Pixel Shader),将结果输出给像素着色器进一步处理。
一个例子
这里假设
(1)输入的顶点是屏幕坐标(严格讲,Raster还需要做透视除法及viewport变换才得到屏幕坐标,可认为Shader里完成了这两个步骤),且每个顶点只有Color一种属性;