1

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

这就是我正在寻找的效果。

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

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

我认为使用混合模式不可能干净地实现这种效果——我的实验很快就产生了像洋红色和青色这样非常明亮的颜色。我简要地研究了 L*a*b* 颜色空间,但实现起来似乎非常复杂(而且速度很慢)。

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

任何帮助将非常感激!

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

4

1 回答 1

2

如果您不需要/想要一些非常复杂的优化,那么您可以通过使用带有BlendMode的BitmapData.draw方法来像在 js/canvas 中一样工作。

此方法可以与BitmapDataDisplayObject一起提供以在您的目标BitmapData处绘制。因此,您的选择是将您的圆圈渲染为临时位图,然后使用您想要的(组合)将其绘制在生成的BitmapDatablendMode,或者为您的圆圈创建矢量图形(以编程方式,使用SpriteGraphics),然后将其渲染到目标BitmapData以同样的方式(我想这会更快,但不太灵活)。

此外,可以在矢量图形中组合整个圆形场景,而不是一个圈一个圈,但是我现在不记得当您以编程方式构建Graphics时有哪些组合选项可用,但我想这种方式值得研究也。

于 2016-01-08T18:13:20.673 回答