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对应的颜色缓冲区中

五、总结

  写的很仓促

posted @ 2022-05-04 17:04  yinjinxuan  阅读(311)  评论(0编辑  收藏  举报