2013-06-19 4 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

My bad! Благодаря! – Sylar

+0

Может ли проблема заключаться в том, что вы рисуете каждый новый круг поверх более старого, что заставляет альфу «стекать» и увеличиваться намного быстрее? –

ответ

2

У меня нет конкретного ответа, но внешний вид второй картины оставил у меня впечатление, что интенсивность не уменьшается линейно, а скорее экспоненциально.

Не могли бы вы вместо выполнения функции линейного уменьшения использовать вместо этого экспоненциальную функцию? Для каждого шага наружу умножьте интенсивность с фиксированным числом a < 1.

+0

Может быть, не совсем экспоненциально, но, скорее всего, суперлинейно. –

+1

Спасибо! ... я принял ваш ответ и решил использовать его, но наоборот. Я начал с внешнего круга, идя внутрь. При очень низкой начальной интенсивности (например, 0,01) i умножил ее на фиксированное число> 1 (например, 1,02), и это дало мне точный результат, который я хотел, и намного больше контроля! – Sylar

+0

@Sylar Great Я мог бы помочь, то, как вы используете, довольно интересно :) –

Смежные вопросы