用纯色填充两个圆的交点

时间:2015-12-31 10:07:39

标签: flash haxe openfl haxeflixel

我试图制作一个简单的照明引擎,允许我在Haxe中混合颜色 - 我标记了闪存,因为API几乎完全相同。 我目前正在将彩色圆圈渲染成BitmapData,然后将其渲染到我的游戏顶部,但我在渲染圆圈之间的交叉点时遇到了很多困难。

This is the effect I'm looking for.

我想知道是否有办法绘制一个由两个其他形状的交集组成的形状(它可能不需要内置到闪光灯中,因为它们是圆圈所以数学相对简单我想)。 这会使渲染两个圆圈变得相对简单,但是一旦我添加了第三个颜色,它就会变得非常复杂......在最坏的情况下我绝不会使用两种以上的颜色!

最后,是否可以使用某种着色器来实现此效果?例如,每次绘制像素时,请查看现有颜色并查找两者的组合(例如红色+黄色=橙色)。我对闪光灯中的着色器知之甚少 - 尽管我使用的是Haxe,所以它甚至可能会再次出现不同!

我不认为用混合模式可以干净利落地达到这种效果 - 从我的实验中可以很快地产生可怕的鲜艳色彩,如洋红色和青色。我简单地研究了L * a * b *颜色空间,但实现它似乎非常复杂(而且很慢)。

一旦我的效果有效,我打算用颜色图检查世界中的像素位置,并根据结果应用各种效果。

非常感谢任何帮助!

编辑:Javascript似乎内置了此功能:Marking the intersecting area between two circles in Canvas

1 个答案:

答案 0 :(得分:2)

如果您不需要/想要进行一些相当复杂的优化,那么您可以使用BitmapData.draw方法BlendMode以与js / canvas相同的方式执行此操作。

此方法可以BitmapDataDisplayObject提供,以便在您的目标BitmapData上绘制。因此,您可以选择将圈子渲染为临时位图,然后在结果BitmapData上绘制所需的blendMode(合成),或创建矢量图形(以编程方式,使用SpriteGraphics)为您的圈子,然后以相同的方式将其渲染到目标BitmapData(我认为这会更快,但不太灵活)。

另外,人们可以在矢量图形中构成整个圆形场景,而不是圆圈,但是我现在无法回忆起编程构建Graphics时可用的构图选项,但是我想这也是值得研究的。