*ESC OFF
*FLOAT 64
HIMEM = PAGE + 2*&100000
ScrW% = 480
ScrH% = 480
PROCFixWndSz
VDU 23,22,ScrW%;ScrH%;8,16,16,0 : OFF
INSTALL @lib$ + "GFXLIB2"
PROCInitGFXLIB( d{}, 0 )
D% = d{}
INSTALL @lib$ + "GFXLIB_modules\BPlotScaleBlend"
PROCInitModule(0)
img% = FNLoadImg( @dir$ + "img2_480x480.bmp", 0 )
srcSprW% = 480
srcSprH% = 480
cX% = ScrW% DIV 2
cY% = ScrH% DIV 2
DIM p(srcSprH%, 2), q(srcSprH%, 2), m(2,2), Y%( 512 )
DIM bgCol{ r%, g%, b% }
dZ% = 1300
minZ% = srcSprH% + 1
maxZ% = minZ% + dZ% + (dZ% DIV 2)
scale% = 925
FOR I% = 0 TO srcSprH%-1
p(I%, 0) = srcSprW%/2
p(I%, 1) = I% - srcSprH%/2
p(I%, 2) = 0
NEXT I%
*REFRESH OFF
REPEAT
T% = TIME
bgCol.r% = 128+127*SIN(T%/800)
bgCol.g% = 128+127*SIN(T%/990 + 1.34)
bgCol.b% = 128+127*SIN(T%/1006 - 0.85)
SYS GFXLIB_Clr%, d{}, FNrgb(bgCol.r%, bgCol.g%, bgCol.b%)
zo% = minZ% + dZ% + (dZ% DIV 2)*SIN(T%/60)*SIN(T%/200 + 1.85)
angle = 4*PI*SIN(T%/400)*SIN(T%/600 + 1.7)
sin = SIN(angle)
cos = COS(angle)
m() = 1,0,0, 0,cos,-sin, 0,sin,cos
q() = p().m()
Y%() = FALSE
FOR I% = 0 TO srcSprH%-1
z% = q(I%,2)
z = scale%/(z% + zo%)
dx% = q(I%,0)*z
dy% = q(I%,1)*z
x1% = cX% - dx%
y1% = cY% + dy%
x2% = cX% + dx%
y2% = cY% + dy%
blend% = 255*(1 - ((z%+zo%)/maxZ%)^2)
IF NOT Y%(y1%) THEN
SYS GFXLIB_BPlotScaleBlend%, D%, img% + 4*480*I%, 480, 1, x2%-x1%, 1, x1%, y1%, blend%
Y%(y1%) = TRUE
ENDIF
NEXT I%
PROCdisplay
UNTIL FALSE
END
DEF PROCFixWndSz
LOCAL W%
SYS"GetWindowLong",@hwnd%,-16 TO W%
SYS"SetWindowLong",@hwnd%,-16,W% ANDNOT&40000 ANDNOT&10000
ENDPROC