分享

cocos2dx 2D光照效果

 勤奋不止 2015-09-11
----更新(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./a-game-of-tricks/










    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多