打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
cocos2dx 2D光照效果
----更新(2013-11-15)
实现了动画的2D光照效果。
视频:
http://player.youku.com/player.php/sid/XNjM1MTk4NDEy/v.swf

----原帖
光照计算是在纹理空间中进行的,因此需要将光源转化到纹理空间,具体方法如下:
fishLeftUpPos_world=this->convertToWorldSpace(ccp(0,this->getContentSize().height));//原因见:http://user.qzone.qq.com/350479720/blog/1384482833
lightRelativeToFishLeftUp=lightPos_world-fishLeftUpPos_world
A=-this->getRotation()*pi/180;//cocos2d-x里旋转是顺时针为正,而数学里旋转是逆时针为正,所以这里要加负号
Xdir=CCPoint(cosA,sinA);//fishSprite旋转后的X轴
Ydir=CCPoint(cos(A+pi/2),sin(A+pi/2));//fish旋转后的Y轴
x=ccpDot(texLeftUpPosToLightPos, Xdir);//lightRelativeToFishLeftUp向Xdir投影,得到light在以fish左上角为原点,Xdir、Ydir为坐标轴的坐标系中的x坐标
y=ccpDot(texLeftUpPosToLightPos, Ydir);//lightRelativeToFishLeftUp向Ydir投影,得到light在以fish左上角为原点,Xdir、Ydir为坐标轴的坐标系中的y坐标
lightPos_texSpace=CCPoint(x/this->getContentSize().width,y/this->getContentSize().height);//纹理坐标需要归一化
light2DInTexSpace.y=-light2DInTexSpace.y;//不过考虑到cocos2d-x中纹理t轴向下,故应取反。得到light在fish的纹理空间中的坐标

截图:


视频:
http://player.youku.com/player.php/sid/XNjM0ODY5NTMy/v.swf

参考:http://www.alkemi-games.com/a-game-of-tricks/










本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
cocos2dx创建工程
Cocos2dx 中create后,如果调用retain(),则不用的时候要调用release。 如果调用addchild,则要调用removefromparint;
Cocos2dLua3.17.2集成FairyGUI(一)
黑科技:用Unity编辑器+Cocos引擎开发3D MMORPG
常用的 cocos2d
cocos2d
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服