| оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | | win koi lat |
|
Графика и видео:
Q: Как pеализован эффект помех изобpажения, когда каpтинка как бы на секyндy смазывается, а потом пpиобpетает pезкость? A: Это своеобpазный Motion Blur: Складываются яpкости точек в напpавлении "смазывания" и pезyльтат делится на длинy (кол-во точек). Пpимеp: если напpавление 0 гpадyсов, длина - 3:
0 0 0 0 0 Сyммиpyешь точки по кооpдинатам "1" и делишь на 3. Это значение кладёшь в даннyю кооpдинатy (сеpединy этого квадpата). Q: Можно ли сделать фильтр для 256-цветного режима? A: Если в realtime - то смотря какой. Если нет, то переводишь в RGB, делаешь и переводишь обратно (самая тормозная часть - именно dithering до 256 цветов, yes). Если в реалтайм, то надо смотреть на фильтр и думать головой. eg, фильтр какого-то из blur'ов [ 0 1 0 ] [ 1 4 1 ] [ 0 1 0 ]делается одной табличкой на полную халяву: пусть table[c1][c2] - это индекс цвета, ближайшего к смеси 0.5*c1+0.5*c2; пусть (x,y) - текущий пиксел (индекс цвета), тогда результат действия фильтра в нем будет такой: c1 = table [(x-1,y)] [(x+1,y)] c2 = table [(x,y-1)] [(x,y+1)] c3 = table [c1] [c2] result = table [c3] [(x,y)] Впрочем, 4 lookup'а по табличке - это тоже медленно, но таки realtime. ;) Q: Как сделать motion blur в 256 цветном режиме, для любой палитры? A: [Lout Roman, 2:463/586.20] ;procedure motionblur2(newbufseg,oldbufseg,tblseg,scrseg:word);
motionblur2 proc
push bp
mov bp,sp
push ds
mov di,64000-320-2
mov es,[bp+6-2] ;scr
mov ds,[bp+8-2] ;tbl
mov fs,[bp+10-2] ;old
mov gs,[bp+12-2] ;new
@@l1:
mov cx,gs:[di]
mov dx,fs:[di]
mov bl,cl
mov bh,dl
mov al,[bx]
mov bl,ch
mov bh,dh
mov ah,[bx]
mov fs:[di],ax
mov es:[di],ax
sub di,2
jnc @@l1
pop ds
pop bp
ret 8
motionblur2 endp
Так сделано в Fields o the Nephilims..
Q: Как сделать быстрый blur? A: [Andrey Petrov 2:461/76.444] ECX - счетчик пикселей @@1:
mov eax, [esi-4]
mov edx, [esi+4]
and eax, 0fcfcfcfch
and edx, 0fcfcfcfch
shr eax, 2
shr edx, 2
add eax, edx
mov ebx, [esi-640]
and ebx, 0fcfcfcfch
mov edx, [esi+640]
shr ebx, 2
and edx, 0fcfcfcfch
shr edx, 2
add esi, 4
add eax, edx
add edi, 4
add eax, ebx
sub ecx, 4
mov [edi-4], eax
jne @@1
Понятное дело, что под исходный битмап нужно резервировать 640x(480+2)x4 байта. Q: Как сделать "увеличение резкости" и возможно ли это? Вот, скажем, я pазмыл надпись и хочу веpнуть ей pезкость... A: Вообще говоря, размывание - процесс необратимый. Hо существуют фильтры и для повышения резкости. Если при размывании ты складывал значения соседних точек с положительными коэффициентами, то при повышении резкости надо сделать то же самое, но с отрицательными.
Можно, но только ограниченно. Для этого существует специальный класс Итерационных алгоритмом ,достаточно сложных математически.
|
Если вы хотите дополнить FAQ - пожалуйста пишите. design/collection/some content by Frog, |