cocos2d-x 2d光照示例
一、概述
之前实现过,2D游戏在漆黑环境下,部分地图被照亮的效果。无意间,浏览cocos2d的示例,看到个3d光照运用到2d的例子,便阅读了一下其过程。文章最后,也会介绍使用渲染纹理的方式来实现照亮效果
二、环境光与慢反射光
1、环境光
一个简单环境光模型,就是物体表面的颜色*(环境光的颜色*环境光的强度)。这表明物品表面的颜色受环境光颜色和强度的影响。
2、慢反射光
光线与物品表面法线的夹角越小,对物体表面颜色的影响就越大
3、带光照的片段着色器程序
三、示例
1、EffectSpriteLamp类 (1)创建一个EffectSprite对象,纹理是大象图片,并最终会使用带光照的片段着色器
(2)创建一个光源的Sprite,用于显示光源的位置
(3)创建一个EffectNormalMapped对象,设置光源的属性
(4)创建触摸监听,用于改变光源的位置
2、EffectSprite类
EffectSprite继承至Sprite,将会使用带光照的片段着色器,来渲染一个精灵。
(3)EffectNormalMapped类
EffectNormalMapped是一个光源数据类,会加载一个带光照的片段着色器,并记录光源的属性。
三、使用渲染纹理实现照亮效果
原理就是使用光源模型的透明度来控制黑色层:
(1)创建黑色颜色层、设置混合方式(源:自己的透明度值,目的:舍弃)
(2)创建光源模型、设置混合方式(源:设置,目的:1 - 源透明度值)
(3)创建渲染纹理
(4)渲染到纹理
四、RenderTexture类
创建FBO对象,附加颜色缓冲区,并启用新的渲染队列,之后的渲染不会对其它环境造成影响,并且会写入当前绑定的FBO对应的颜色缓冲区中
五、总结
写的很仓促