【发布时间】: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