反转渐变/照明

时间:2012-10-24 23:21:42

标签: c# xna distance tiles lighting

我基本上做了一些渐变,通过给出网格颜色的图块,它看起来像这样:

enter image description here

现在,我想要反转它,所以光是白色的,周围是黑色的,我该怎么做呢?我尝试了很多,但我没有做过任何工作。

以下是代码:

            foreach (Tile tiles in Tiles)
        {
            tiles.distance = (mousePos - tiles.pos).Length();

            tiles.color = new Color(tiles.distance / size, tiles.distance / size, tiles.distance / size);
        }

3 个答案:

答案 0 :(得分:1)

我很抱歉,如果这看起来很明显(意味着你已经尝试过了),但我自己做了很多次没想过......

您使用的是哪种数据类型? tiles.distance看起来像一个浮点数,这意味着除法将解析为浮点数,这反过来意味着你最终将使用颜色(单,单,单)构造函数而不是颜色(字节,字节,字节) )构造函数。这意味着你必须从1而不是255 / 0xFF中减去,否则你最终得到的值远远超过1(上限 - >白色)。

如果这是问题,则会出现以下情况:

tiles.color = new Color(1 - tiles.distance / size, 1 - tiles.distance / size, 1 - tiles.distance / size);

答案 1 :(得分:0)

从0xFF中减去每个颜色分量:

float value = 0xFF - tiles.distance / size;
tiles.color = new Color(value, value, value);

答案 2 :(得分:0)

tiles.color = new Color(255 - (tiles.distance / size), 255 - (tiles.distance / size),255 - (tiles.distance / size));

减去255(全白)