在瓷砖照明中混合颜色的最佳方法? (XNA)

时间:2014-06-07 00:24:17

标签: c# colors xna lighting blending

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

Light Colors Not Blending

这是我的颜色混合代码:

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)));

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

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

我认为你可能需要这样做:

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,这是你第一次亮光的因素。我试过这个manualy,它看起来像this.(我不允许上传没有名声的图片:[)