About

Showing posts with label ripple. Show all posts
Showing posts with label ripple. Show all posts

6/14/11

Coding: Pixel ripple effect

Obfuscated C code! This is the inner core loop of a water rippling effect, though I spent some time rearranging the code, because it looked cool for some reason. Do you get what is going on here ? :p
switch    (renderflag)          {
case      0                  :  {
for(int i=1; i < resy-1 ; i  ++ )  {
for(int j=1; j < resx-1 ; j  ++ )  {
    buf1   [ j ]     [ i     ]  =
    ((                          (
    buf2   [ j + 1 ] [ i     ]  +
    buf2   [ j - 1 ] [ i     ]  +
    buf2   [ j ]     [ i - 1 ]  +
    buf2   [ j ]     [ i + 1 ]  )
    >>                     1 )  -
    buf1   [ j ]     [ i     ] );
    buf1   [ j ]     [ i     ] -=
    buf1   [ j ]     [ i     ] >>
    7                           ;
    offsetx                     =
    buf1   [ j ]     [ i     ]  -
    buf1   [ j + 1 ] [ i     ]  ;
    offsety                     =
    buf1   [ j ]     [ i     ]  -
    buf1   [ j ]     [ i + 1 ]  ;
    _putpixel(  water, j , i   ,(
    128      -  offsetx        )&
    255                        );
    offsetx                   >>=
    8        ;  offsety       >>=
    8                           ;
    indexu   =  offsetx  + j    ;
    indexv   =  offsety  + i    ;
    if       (  indexu         >=
    resx     )  indexu         -=
    resx                        ;
    else if  (  indexu   < 0    )
    indexu                     +=
    resx                        ;
    if       (  indexv         >=
    resy     )  indexv         -=
    resy                        ;
    else if  (  indexv   < 0    )
    indexv                     +=
    resy                        ;
    _putpixel(  vscreen  , j    ,
    i                         ,((
    _getpixel(  backdrop        ,
    indexu                      ,
    indexv   )                 <<
    8                          )+
    _getpixel(  water, j , i   ))
    >>                     8   );
    }}}         break           ;
case 1                         :{
for(int i=1; i < resy-1 ; i  ++ )  {
for(int j=1; j < resx-1 ; j  ++ )  {
    buf2   [ j ]     [ i     ]  =
    ((                          (
    buf1   [ j + 1 ] [ i     ]  +
    buf1   [ j - 1 ] [ i     ]  +
    buf1   [ j ]     [ i - 1 ]  +
    buf1   [ j ]     [ i + 1 ]  )
    >>                     1 )  -
    buf2   [ j ]     [ i     ] );
    buf2   [ j ]     [ i     ] -=
    buf2   [ j ]     [ i     ] >>
    7                           ;
    offsetx                     =
    buf2   [ j ]     [ i     ]  -
    buf2   [ j + 1 ] [ i     ]  ;
    offsety                     =
    buf2   [ j ]     [ i     ]  -
    buf2   [ j ]     [ i + 1 ]  ;
    _putpixel(  water, j , i   ,(
    128      -  offsetx        )&
    255                        );
    offsetx                   >>=
    8        ;  offsety       >>=
    8                           ;
    indexu   =  offsetx  + j    ;
    indexv   =  offsety  + i    ;
    if       (  indexu         >=
    resx     )  indexu         -=
    resx                        ;
    else if  (  indexu   < 0    )
    indexu                     +=
    resx                        ;
    if       (  indexv         >=
    resy     )  indexv         -=
    resy                        ;
    else if  (  indexv   < 0    )
    indexv                     +=
    resy                        ;
    _putpixel(  vscreen  , j    ,
    i                         ,((
    _getpixel(  backdrop        ,
    indexu                      ,
    indexv   )                 <<
    8                          )+
    _getpixel(  water, j , i   ))
    >>                     8   );
    }}}         break           ;
    default:    break;          }