【问题标题】:Filling the intersection of two circles with solid colour用纯色填充两个圆的交点
【发布时间】:2015-12-31 10:07:39
【问题描述】:

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

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

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

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

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

任何帮助将不胜感激!

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

【问题讨论】:

    标签: flash haxe openfl haxeflixel


    【解决方案1】:

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

    此方法可以与BitmapData 或DisplayObject 一起提供以在您的目标BitmapData 处绘图。因此,您的选择是将您的圆圈渲染为临时位图,然后使用您想要的 blendMode(composition) 在生成的 BitmapData 上绘制它,或者创建矢量图形(以编程方式,使用 Sprite 和 Graphics)你的圈子,然后以相同的方式将其渲染到目标BitmapData(我想这会更快,但灵活性较差)。

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

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多