灰度效果常被用于死亡世界,其实现方式是利用全屏后处理对每帧渲染的纹理图像进行灰度处理,在Away3D中利用Filter3DBase滤镜可以很容易的扩展出各种后处理效果。 其基本原理即: 每帧对场景及场景中所有对象进行渲染,渲染得到的图像数据并不直接绘制到后台缓冲区,而是绘制到纹理(RTT)然后对这张纹理进行处理并将最终结果传入缓冲区显示。
Away3D中滤镜的工作流程: 在每帧绘制的时候判断是否有滤镜效果 如果当前开启滤镜则先绘制到纹理,在对该纹理进行第二次绘制。
实现灰度效果只需继承滤镜基类 (因为功能比较简单且直接绘制到后台缓冲故无需其他太多处理)
实现具体灰度效果绘制任务 ps 的主要算法 对原纹理(每帧绘制场景的数据)采样得到颜色值ft0 对颜色值进行如下计算得到最终灰度效果 ft0 *= fc0(r g b分别乘以常量分量) 将r g b三个分量只和最为最终颜色值
绘制效果: 开灰度效果之前:
开灰度效果之后:
|