什么是蒙版缓存
图像硬件中有个特殊内存,叫Stencil buffer。很多地方翻译做模板缓存,我觉的用蒙版缓存更贴切。因为这个缓存的和PS的图层蒙版很相似。渲染目标(Render Target,可以是屏幕,可以是离屏表面,可以是纹理)中每个像素在蒙版缓存中都有对应的蒙版值(Stencil Ref)。缓存中还有一个可以设置的蒙版函数(CompareFunction),例如 CompareFunction,例如Compare Function.Greater(大于)、CompareFunction.GreaterEqual(大于等于)、CompareFunction.Less(小于)和CompareFunction.LessEqual(小于等于)等等。
每个像素的蒙版值(StencilBufferValue)通过测试函数(CompareFunction)与参考值(StencilRef)进行比较,只有符合测试函数条件的像素才能被渲染出来。举一个例子,测试函数为CompareFunction.Less(小于),参考值(StencilRef)为0,那么只有蒙版值小于0的像素才能被渲染出来。蒙版缓冲区就是这样利用测试函数达到了控制像素渲染的目的。
蒙版缓存在3D中的用途有实现倒影,用Shadow volume实现阴影
相关链接
http://en.wikipedia.org/wiki/Shadow_volume
http://en.wikipedia.org/wiki/Stencil_buffer
http://wenku.baidu.com/view/3eb40b1714791711cc7917a2.html
http://www.owlei.com/DancingWind/
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=26