在做一个模板缓存(stencil buffer)应用过程中,想了解一下光栅化之后像素的具体流程。在网上查了一下,发现不少文章说得有些混乱。自己花时间查清了,做个笔记,如有错误,也请指正。

在图元经过几何管道处理后,最后转化成屏幕空间中的三角形(或线段),对其光栅化后产生一系列像素以在屏幕上显示出来。对于每个像素:

1. 首先送入Pixel Shader运算,输出 RGB,Alpha 和 Z depth(可选)。

2. 接着做 Scissor Test

相关api: SetScissorRect(CONST RECT* pRect);
GetScissorRect(RECT* pRect);
D3DRS_SCISSORTESTENABLE;
D3DCAPS9.RasterCaps-gt;D3DPRASTERCAPS_SCISSORTEST;

3. 接着做 Alpha Test

相关api: D3DRS_ALPHATESTENABLE;
D3DRS_ALPHAREF;
D3DRS_ALPHAFUNC;
D3DCAPS9.AlphaCmpCaps;

4. 接着做 Stencil Test 和 Depth Test (这俩个人理解是可以看作一起做的)

相关api: D3DRS_STENCILENABLE;
D3DRS_STENCILFAIL; ( if the stencil test fails )
D3DRS_STENCILZFAIL; ( if the stencil test passes and the depth test fails )
D3DRS_STENCILPASS; ( if both the stencil and the depth tests pass )
D3DRS_STENCILFUNC;
D3DRS_STENCILREF;
D3DRS_STENCILMASK;
D3DRS_STENCILWRITEMASK;

D3DRS_ZENABLE;
D3DRS_ZWRITEENABLE;
D3DRS_ZFUNC;

5. Specular Add

相关api: D3DRS_SPECULARENABLE;

6. Fog

相关api: D3DRS_FOGENABLE;
D3DRS_FOGCOLOR;

7. Alpha Blend

相关api: D3DRS_ALPHABLENDENABLE;
D3DRS_SRCBLEND;
D3DRS_DESTBLEND;

8. Dithering

相关api: D3DRS_DITHERENABLE;



最后输出到Render Target。点这儿看更多...锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛