----更新(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/ |
|
来自: 勤奋不止 > 《游戏引擎cocos2d》