Cocos2d – iPhone上的月食效果
我有一个关于实现像月食一样的效果的问题。 效果应该看起来像在这个gif的第一秒钟。 所以就像一个黑色的影子,越过了这个圈子。 理想的情况是一个函数,我可以通过一个参数的百分比来获得这个数量作为一个阴影在圆上:
我面临的问题是我的背景是一个渐变。 所以不可能有一个黑色的圆圈在月球上移动来获得效果。
我尝试了CCClippingNode
东西,但它看起来不好。 此外,边缘上的剪辑总是有点像素化。
我想过使用GLSL着色器来达到这个效果,但是我对GLSL并不是很熟悉,我找不到一个例子。
效果是为iPhone开发的应用程序游戏。 我使用版本3(当前版本)中的cocos2d框架。
有人有一个想法如何得到这个效果? 一个想法,我可以开始search?
先谢谢你
背后的物理学很简单,就是改变月亮上的光。 所以
-
我会创build一个代表照明条件的一维渐变纹理
-
计算每个渲染的月亮像素
你显然有月亮的2D纹理。 所以你现在需要获取一维光照纹理内每个像素的位置。 所以如果月亮是完全可见的,你是在阳光下。 当部分黯然失色,那么你是在本影区域。 而最后的日食,你在半影区。 所以只需要计算月球位置的中点。 其余的则使用卫星运动方向的相对位置。
所以现在只需将月球表面与照明纹理相乘并渲染输出。
-
工作时可以添加曲率校正
现在你得到了线性切割的月相,但是实际的相位是弯曲的,因为照明条件也与运动方向和卫星中心的径向距离不同。 要解决这个问题,你可以做
- 将照明转换为2D纹理
- 或者根据径向距离将纹理坐标移动一些曲率