Autor Wątek: [Allegro][C++][Efekty] Blur?  (Przeczytany 3870 razy)

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 16:31:59
Witam wszystkich
Czy mógł by mi ktoś przybliżyć/ podać jakąś technike osiągnięcia motion blur'a w bibliotece allegro?? Z góry dziękuję...

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Maj 10, 2010, 16:38:50
blendowanie bitmapy screena do bitmapy motionblura mnozac kanal alpha przez jakas wartosc. allegro chyba taka funkcje posiada, racja?

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 16:40:57
blendowanie bitmapy screena do bitmapy motionblura mnozac kanal alpha przez jakas wartosc. allegro chyba taka funkcje posiada, racja?

Wiem, że pewnie mnie nazwiecie No0bem albo coś w tym stylu ale nie wiele zrozumiałem z tego co napisałeś :) sorry .. Mógłbyś mi rozjaśnić?? ("PS> POSZUKAM NA NECIE MOŻE ZROZUMIEM OCB")

Offline Dab

  • Redaktor
    • blog

# Maj 10, 2010, 16:45:30
Cytuj
Wiem, że pewnie mnie nazwiecie No0bem albo coś w tym stylu ale nie wiele zrozumiałem z tego co napisałeś Smiley sorry .. Mógłbyś mi rozjaśnić?? ("PS> POSZUKAM NA NECIE MOŻE ZROZUMIEM OCB")

Wystarczy pisać po polsku a nie w tym dziwnym języku a częstość nazywania noobem znacznie spadnie :)

Natomiast co do motion blur to możesz to zrobić tak samo jak byś to zrobił jako shader postprocess: czyli dla każdego piksela tekstury docelowej samplujesz wzdłuż zadanej linii N pikseli tekstury źródłowej i mnożysz je przez ich wagi.

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 16:52:49
Cytuj
Wiem, że pewnie mnie nazwiecie No0bem albo coś w tym stylu ale nie wiele zrozumiałem z tego co napisałeś Smiley sorry .. Mógłbyś mi rozjaśnić?? ("PS> POSZUKAM NA NECIE MOŻE ZROZUMIEM OCB")

Wystarczy pisać po polsku a nie w tym dziwnym języku a częstość nazywania noobem znacznie spadnie :)

Natomiast co do motion blur to możesz to zrobić tak samo jak byś to zrobił jako shader postprocess: czyli dla każdego piksela tekstury docelowej samplujesz wzdłuż zadanej linii N pikseli tekstury źródłowej i mnożysz je przez ich wagi.

Czyli robić tak jakby zrzut ekranu i wyświetlać go z przeźroczystością i opóźnieniem??

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Maj 10, 2010, 17:12:52
bool blit_alpha(BITMAP* dest,BITMAP* src,float alpha)
{
if(src->w!=dest->w||src->h!=dest->h)return(false);
for(unsigned int j=0;j<src->h;j++)
for(unsigned int i=0;i<src->w;i++)
dest->line[j][i]=(unnsigned char)max(0,min(255,(float)dest->line[j][i]*(1.0f-alpha)+(float)src->line[j][i]*alpha));
return(true);
}

BITMAP* screen=0,mblur=0;
// inicjacja itp.
while(graj)
{
// blitujesz sprajty na bitmape screena
blit_alpha(mblur,screen,0.1);
// blitujesz na ekran bitmape mblur
}
« Ostatnia zmiana: Maj 10, 2010, 17:15:50 wysłana przez PsichiX »

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 17:42:40
bool blit_alpha(BITMAP* dest,BITMAP* src,float alpha)
{
if(src->w!=dest->w||src->h!=dest->h)return(false);
for(unsigned int j=0;j<src->h;j++)
for(unsigned int i=0;i<src->w;i++)
dest->line[j][i]=(unnsigned char)max(0,min(255,(float)dest->line[j][i]*(1.0f-alpha)+(float)src->line[j][i]*alpha));
return(true);
}

BITMAP* screen=0,mblur=0;
// inicjacja itp.
while(graj)
{
// blitujesz sprajty na bitmape screena
blit_alpha(mblur,screen,0.1);
// blitujesz na ekran bitmape mblur
}

Kod rozumiem z wyjątkiem tych dziwnych obliczeń co są po znaku =... Nie mam pojęcia o co w nich chodzi :/ A one są chyba najważniejsze ;(

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Maj 10, 2010, 17:48:15
funkcja przechodzi petla po wszystkich pixelach obu bitmap i kopiuje dany pixel z src do dest z przezroczystoscia

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 17:52:06
ahaaa... a co oznaczają te char max i mini... i czy nie prościej zrobić screenshot i wyświetlić za pomocą draw_trans_sprite??

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Maj 10, 2010, 18:00:31
max i min ograniczaja wynikowa wartosc do przedzialu [0;255] aby miescila sie w unsigned char czyli w kanale pixelu.
co do screenshota: moze prosciej ale na pewno nie szybciej

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Maj 10, 2010, 18:01:35
max i min ograniczaja wynikowa wartosc do przedzialu [0;255] aby miescila sie w unsigned char czyli w kanale pixelu.
co do screenshota: moze prosciej ale na pewno nie szybciej
sprawdzałeś  ;)?

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 18:03:42
Aha... Jeszcze jedno pytanie... :)Czym różni się funkcja set_trans_blender od set_alpha_blender?? Czy kanał alpha ma więcej/mniej funkcji - mają jakieś osobne zalety/wady?

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Maj 10, 2010, 18:07:39
świrus: no właśnie nie mam okazji dla tego zakładam iż musi to działać :P

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Maj 10, 2010, 18:09:34
świrus: no właśnie nie mam okazji dla tego zakładam iż musi to działać :P
Cytuj
ale na pewno nie szybciej

Więc jak nie wiesz, to możesz po prostu się zamknąć i nic nie mówić?

Offline zombi300

  • Użytkownik

# Maj 10, 2010, 18:11:47
świrus: no właśnie nie mam okazji dla tego zakładam iż musi to działać :P
Cytuj
ale na pewno nie szybciej

Więc jak nie wiesz, to możesz po prostu się zamknąć i nic nie mówić?


Yo-ej wyluzujcie... :P PS.świrus - jemu chodziło chyba o to, że nie może być szybciej (ja też tak uważam) bo działa na podobnej zasadzie a screen shot ma jeszcze parę dodatkowych linijek kodu nie wiem od czego i wykorzystuje getpixel :P... (właśnie lukałem do źródełek allegro :))
« Ostatnia zmiana: Maj 10, 2010, 18:13:47 wysłana przez zombi300 »