2013-06-19 49 views
1

所以,我试图创建一个径向渐变(用于游戏中的静态照明)。我想出了这个:平滑径向渐变

int step = 4; 
int forLen = (radius/step); 
g.setColor(new Color(0, 0, 0, intensity)); 
for (int i = 0; i < forLen; i++) 
    g.fillOval(radius - i * step, radius - i * step, i * step * 2, i * step * 2); 

但结果我得到的是:

enter image description here

我想获得更平滑的梯度,如:

enter image description here

我试着玩弄台阶和强度,但我无法得到类似于上面渐变的东西。 什么是这样做的好方法? 在此先感谢!

+0

无需在标题中包含标签。删除;) – Burkhard

+0

我的坏!谢谢! – Sylar

+0

难道问题是你正在绘制每一个新的圆的顶部,从而导致阿尔法“堆叠”,并增加更快? –

回答

2

我没有具体的答案,但第二张照片的外观给我留下的印象是,强度不是线性递减,而是呈指数形式。

你可以试试,而不是做一个线性递减函数,而是使用指数函数?对于每一步向外,将强度乘以固定数字a < 1.

+0

也许不是完全指数级的,但很可能是超线性的。 –

+1

谢谢! ...我拿出你的答案并决定使用它,但方式相反。我从外圈开始,向内走。以一个非常低的起始强度(例如0.01),我将它乘以一个固定的数字> 1(例如1.02),这给了我想要的确切结果,以及更多的控制! – Sylar

+0

@Sylar伟大的我可以帮忙,你使用的方式很有趣:) –