D3D中的HLSL

来源:互联网 发布:做什么淘宝生意火爆 编辑:程序博客网 时间:2024/05/18 01:50

AGP显卡的渲染流程:

首先来根据下面这张图粗略说明一下当前最普遍流行的AGP显卡的渲染流程,甭管是nVidia还是ATI哪一边的。

每次渲染过程(例如,在一帧画面中画一个馒头的过程)都包括顶点处理(Vertex Processing)和像素处理(Pixel Processing)两个主要功能模块的执行。首先,显卡从AGP总线接收这个馒头的顶点数据。这些数据包括位置、法线、贴图坐标(如果是面包可能更需要贴图,也就是说贴图坐标不是必需的)等等,这些都是未经过任何变换,也就是在物体本地空间(Object Space)下的原始坐标。每个顶点依次被送入顶点处理单元,在这里进行坐标变换、光照计算(如果是每顶点光照)等工作,变换的结果是把每个三角形变换置屏幕空间(Screen Space) 下直接可用。这里用到的变换矩阵、灯光等信息都是处理每一批顶点时一次性传给显卡的,作为显卡的资源。顶点处理圈定了三角形的范围,接下来就要逐像素地填 充这个三角形了。填充哪些像素是靠对顶点屏幕坐标的线性插值来决定的。像素的其他一些必要参数,如颜色,贴图坐标等也是通过对上一步计算出来的顶点的这些 属性进行插值得到的。另外每个像素还要通过深度检测和模板检测决定最终是否绘制。需要绘制的像素被送进像素处理模块,进行贴图像素取值,贴图混合等工作, 必要的话每像素光照也在这里完成。这里贴图等信息也是作为显卡的资源。像素最终的处理结果被放进后备缓冲。

以往显卡在顶点处理和像素处理过程中执行的是一套布在硬件上的固定的程序,D3D程序员只能设置一些参数,实际上就是你调用IDirect3DDevice::SetRenderState()时做的事,而这样的程序在IDirect3DDevice::DrawPrimitive()中自动执行。那么有些事情就很难办到,如渲染一个水晶馒头。应为参数再多,其渲染所用到的光照公式也跑不出石膏这种东西。现在的显卡,确切的说是现在的Direct3D允许你写这么一段程序替代固定的顶点处理过程和像素处理过程(记住,只是这两个过程,跟插值什么的没关系)。其中替换顶点处理的就叫Vertex Shader(暂时还没有确切的中文名),替换像素处理的就叫Pixel Shader。就是开篇所说的Shader

 
原创粉丝点击