在做一个模板缓存(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|蛮牛
- 还没有人评论,欢迎说说您的想法!