Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

Как изменять контрастность спрайта?   Найти похожие ветки 

 
Степан   (2005-04-16 20:56) [0]

У меня в игре есть круглая тень от главного героя, как можно менять ее контрастность (побайтово), в зависимости от высоты героя над поверхностью? Я пробовал просто увеличивать значение каждого байта (тень - это черный градиент на белом фоне, рисуется через Multiply), то она просто уменьшается с высотой, а надо, чтобы становилась тусклой...

Просьба не советовать компоненты!


 
XProger ©   (2005-04-17 01:31) [1]

Не пытался альфу менять перед отрисовкой?

glColor4f(R, G, B, Height/MaxHeight);
DrawShadow;


 
Степан   (2005-04-17 03:56) [2]


> XProger ©   (17.04.05 01:31)
> Не пытался альфу менять перед отрисовкой?
>
> glColor4f(R, G, B, Height/MaxHeight);
> DrawShadow;


Дык я же посредством Multiply - там без альфы... И делаю это на PowerDraw :)

Только я понял, что мне нужна не обычная контрастность, а такая, как в Фотошопе - Levels (Ctrl+L), в этом окне есть 3 ползунка в ряд, вот если взять тот, что посередине, и потаскать - то, что мне нужно! Подскажите, пожалста, как такое сделать...


 
Степан   (2005-04-17 04:12) [3]

Вот, что я смог придумать:

A := Round(A + (255 - A) / (255 / (255 / (MaxDistance / Distance))));

Здесь переменная А - это обрабатываемый байт, MaxDistance - максимальная высота, Distance - текущая высота... Так есть один недостаток - чем меньше контрастность (выше объект, от которого тень), тем больше расплывается... А надо, как я написал в предыдущем посте! Помогите :)


 
XProger ©   (2005-04-17 04:16) [4]

Степан, и сколько же теней у тебя? Ато такие "эмпирические" методы скоростью не блещут... Хотя, PD - какая там скорость... ;)


 
MsShtaer ©   (2005-04-17 10:41) [5]

A := Round(A / (MaxDistance/(Distance+1))) - Добавляю 1 чтобы небыло деления на 0.


 
MsShtaer ©   (2005-04-17 10:43) [6]

Сори, A := Round(A / (Distance*k+1)) - так правильнее


 
Степан   (2005-04-17 14:11) [7]


> XProger ©   (17.04.05 04:16)
> Степан, и сколько же теней у тебя? Ато такие "эмпирические"
> методы скоростью не блещут... Хотя, PD - какая там скорость...
> ;)

Да нормально :) Главное, чтобы тень была нормальной!


> MsShtaer ©   (17.04.05 10:43)
> Сори, A := Round(A / (Distance*k+1)) - так правильнее

А что такое k?

Механизм таков: сначала беру из спрайта тени один байт (там ведь все составляющие цвета одинаковые) - это переменная А - потом добавляю к нему число в зависимости от дистанции, и так с каждым байтом. А потом рисую через Multiply

Попробуйте нарисовать в Фотошопе черный круговой градиент на белом фоне, затем Ctrl+L - и ползунок, тот, что посередине, подвигайте влево - получается хорошая тень! Она становится тусклее, но при этом видна темная середина, а при обычном контрасте все превращается в серое пятно... Как же сделать? :)


 
Степан   (2005-04-17 15:16) [8]

Я вот придумал другой способ обработки байта:

d := Round(255 / ((MaxDistance - 1) / Distance)); // Расчет байта высоты
a := Byte(PD^); // беру байт пиксела тени
a := Round(a + ((255 - a) / (255 / d)) * ((d + a / 2) / 255)); // итого

Ну так смотрится нормально... А вот Levels, как в Photoshop, я нашел и в ACDSee 6 - все таки интересно, как такое у себя сделать?


 
Sapersky   (2005-04-19 13:13) [9]

Она становится тусклее, но при этом видна темная середина

Возможно, гамма-коррекция нужна? Пример из FastLib (http://prdownloads.sourceforge.net/skinner/FastLib.zip?download), A - исх. пиксель, Amount - коэфф. гаммы (1 - норма):

y:=1 / Amount;
z := Round( 255 * Exp(y * Ln(A / 255)) );
if z>255 then z:=255 else if z<0 then z:=0;
A := z;

И кстати, можно попробовать не перелопачивать всю текстуру, а менять цвет спрайта (цвет вершин) по такой или подобной формуле.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
3-1120210758
Sergo
2005-07-01 13:39
2005.08.07
DB Navigator


1-1121676770
umod.47
2005-07-18 12:52
2005.08.07
Мультиязыковая поддержка


1-1121966481
Андрей Молчанов
2005-07-21 21:21
2005.08.07
Освобождение pidl


10-1098875056
Николай
2004-10-27 15:04
2005.08.07
Проблема MS Access


3-1120209540
Dell3r
2005-07-01 13:19
2005.08.07
Помогите составить запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский