【发布时间】:2016-01-20 10:10:55
【问题描述】:
我有一个关于实现像月食这样的效果的问题。效果应该看起来像这个 gif 的前几秒。所以就像一个黑色的阴影越过圆圈。理想的情况是一个函数,我可以通过百分比传递一个参数来获得这个数量作为圆圈上的阴影:
我面临的问题是我的背景是渐变的。所以不可能有一个在月球上移动的黑色圆圈来获得效果。
我用CCClippingNode 尝试了一些东西,但看起来不太好。此外,边缘的剪辑总是有点像素化。
我考虑过使用 GLSL Shader 之类的东西来实现效果,但我对 GLSL 不太熟悉,也找不到示例。
效果适用于为 iphone 开发的应用游戏。我使用的是版本3(当前版本)的cocos2d框架。
有人知道如何获得这种效果吗?我可以从哪里开始搜索?
提前谢谢你
【问题讨论】:
-
您可能会因实施着色器而迷失方向......我发现学习曲线相当僵硬......但它们可以产生惊人的效果。查看here 以获取接近的示例。浏览该网站,查看大量示例和示例代码。
-
@YvesLeBorg 感谢您提供的好网站。我将检查其中一些着色器。但是对于性能来说,它看起来有点沉重。但是我会尝试。但总的来说,您是否知道任何其他解决方案可以通过 cocos2d 帮助获得效果? CCRenderTexture 可能吗?
-
很遗憾没有,既然我已经学习了,着色器是我处理复杂图形的“goto”解决方案。顺便说一句,即使在低端的古董设备上,我也能通过着色器获得非常可观的性能。着色器非常高效,您只需要了解并理解 v3.x 中的自动绘制调用批处理即可。
-
cocos2d 中是否还有一个带有着色器的自动绘制调用批处理(现在只知道精灵)?好的,所以您的建议是使用着色器?
-
着色器应用于精灵,改变渲染。有些事情会中断精灵的自动批处理,着色器就是其中之一:阅读this 以获取完整的故事。当您计划使用着色器时,您必须确保将“着色”精灵添加到来自单个纹理的长长的精灵流的末尾。最后,我说我会走那条路。下面的答案很聪明(一维纹理,少数学),并让着色器进行像素操作(非常快)。
标签: ios objective-c iphone cocos2d-iphone glsl