【问题标题】:Best way to blend colors in tile lighting? (XNA)在瓷砖照明中混合颜色的最佳方法? (XNA)
【发布时间】:2014-06-11 02:57:11
【问题描述】:

我在我的游戏中制作了一个彩色、体面、递归、快速的瓷砖照明系统。它做了我需要的一切,除了一件事:根本不混合不同的颜色:

这是我的颜色混合代码:

return (new Color(
       (byte)MathHelper.Clamp(color.R / factor, 0, 255),
       (byte)MathHelper.Clamp(color.G / factor, 0, 255),
       (byte)MathHelper.Clamp(color.B / factor, 0, 255)));

如您所见,它没有考虑已经存在的颜色。 color是之前的灯的颜色,被上面的代码factor弱化了。如果我想使用已经存在的颜色进行混合,我会使用变量blend

这是我尝试使用 blend 失败的混合示例:

return (new Color(
       (byte)MathHelper.Clamp(((color.R + blend.R) / 2) / factor, 0, 255),
       (byte)MathHelper.Clamp(((color.G + blend.G) / 2) / factor, 0, 255),
       (byte)MathHelper.Clamp(((color.B + blend.B) / 2) / factor, 0, 255)));

这种颜色混合会产生不准确和奇怪的结果。我需要一个准确的混合,就像第一个示例一样,将两种颜色混合在一起。

最好的方法是什么?

【问题讨论】:

  • 不妨在这里试试:gamedev.stackexchange.com
  • 尝试调用您的红光、绿光和蓝光的照明代码,然后将它们组合起来,而不是一次全部组合。
  • @Cyral 不会产生同样的结果吗?
  • 没做过/试试这个,但也许你可以在你想要混合的地方使用透明度,这样两种颜色就会同时显示出来......顺便说一句,你的图片引起了我的注意游戏:o(让我想再次回到 XNA)。
  • 只需将颜色添加在一起就足够了。看起来您已经通过 Clamp 调用避免了字节溢出。尽量不要除以 2 或因子,看看你会得到什么。

标签: c# colors xna lighting blending


【解决方案1】:

我认为您可能必须这样做:

return (new Color(
   (byte)MathHelper.Clamp(((color.R / factor_1 + blend.R / factor_2)), 0, 255),
   (byte)MathHelper.Clamp(((color.G / factor_1 + blend.G / factor_2)), 0, 255),
   (byte)MathHelper.Clamp(((color.B / factor_1 + blend.B / factor_2)), 0, 255)));

你看,如果你添加例如红色 (255,0,0) 和绿色 (0,255,0),你应该有黄色 (255,255,0),对吧? 使用您正在使用的代码,您将拥有深黄色 (128, 128, 0)。 我认为上面的代码可能有效,但您需要变量 factor_2,即您的第一盏灯的因子。我手动尝试了这个,它看起来像this.(我不允许上传没有声誉的图像:[)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多