*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