所以这是我的问题:
目前我正在为游戏开发原始灯光系统。舞台上覆盖着黑色面具来代表“黑暗”,然后将其alpha从0(最亮,不可见)调整为1(完全黑暗,不透明)。当“英雄”接近光线时,我减去总数从1开始吸收光线的数量。为了在每个光线周围创造一个光线“区域”,英雄越近,光线越多,我使用了一个二次表达式,将“距离”作为自变量。
我的代码如下所示:
var boost:Number = 0;
var exponent:Number = 1-.1*(Lists.Lights.length)
for (var ii:int = 0; ii < Lists.Lights.length; ii++) {
var dist:Number = Lists.Lights[ii].getDistance()/100
var addMe:Number = -Math.pow(dist, exponent) + Math.pow(dist, exponent / 2) + 1
if(addMe>0){
boost += addMe
}
}
trace(boost)
var b:Number = brightness - boost
问题是调整灯光数量的指数。目前灯光越多,调整越严重。更多灯=范围更短的灯。这是因为所有的灯都相互抵消,远处的灯几乎没有效果。
那么,我应该尝试重构我的代码以使用不同的方法,还是我在这里看不到的东西?
答案 0 :(得分:0)
在Reality(TM)中,光的强度基本上是光度/(dist ^ 2)(或者如果你愿意,可以是发光度* dist ^( - 2))。我不知道通过-dist ^ 2术语建模它将非常接近你想要的(图形的形状-x ^ 2和x ^( - 2)并不是那么相似)。我建议做类似的事情(虽然当你非常接近光源时,这会变得非常大,所以你可能想要一个小距离的截止点。)