*FLOAT 64 MODE 8 OFF INSTALL @lib$ + "GFXLIB2" PROCInitGFXLIB *REFRESH OFF SYS GFXLIB_Clr%, dispVars{}, FNrgb( 40, 70, 160 ) FOR r = 1 TO 3 FOR theta = 0.0 TO 2.0*PI STEP 0.005 T% = TIME x = 320 + 75*r*SIN(theta) y = 256 + 75*r*COS(theta) SYS GFXLIB_PlotPixel%, dispVars{}, x, y, &FFFFFF NEXT theta NEXT r PROCdisplay REPEAT UNTIL INKEY-99 OR INKEY(1)=0 SOUND 1, -10, 230, 1 REM. Now draw the three circles using subpixel plotting SYS GFXLIB_Clr%, dispVars{}, FNrgb( 40, 70, 160 ) FOR r = 1 TO 3 FOR theta = 0.0 TO 2.0*PI STEP 0.005 T% = TIME x = 320 + 75*r*SIN(theta) y = 256 + 75*r*COS(theta) PROC_PlotSubPixel( dispVars.bmBuffAddr%, 640, 512, x, y, &FFFFFF ) NEXT theta NEXT r PROCdisplay OSCLI "REFRESH ON" : ON : REPEAT UNTIL INKEY(1)=0 END : : : : DEF PROC_PlotSubPixel( pBuffer%, bW%, bH%, x, y, colour% ) LOCAL x%, y%, i x% = INTx y% = INTy IF (x - x%) = 0 AND (y - y%) = 0 THEN PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, 1.0*&10000 ) ENDPROC ENDIF REM. 2x2 square REM. bottom-left square i = (x%+1 - x)*(y%+1 - y) IF i > 0 THEN PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, i*&10000 ) ENDIF REM. bottom-right square i = ((x+1) - (x%+1))*(y%+1 - y) IF i > 0 THEN PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%+1, y%, colour%, i*&10000 ) ENDIF REM. top-left square i = (x%+1 - x)*((y+1) - (y%+1)) IF i > 0 THEN PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%+1, colour%, i*&10000 ) ENDIF REM. top-right square i = ((x+1) - (x%+1))*((y+1) - (y%+1)) IF i > 0 THEN PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%+1, y%+1, colour%, i*&10000 ) ENDIF ENDPROC : : : : DEF PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, i% ) LOCAL p% IF x% < 0 OR x% >= bW% THEN ENDPROC IF y% < 0 OR y% >= bH% THEN ENDPROC p% = pBuffer% + 4*(bW%*y% + x%) !p% = FN_blendPixel( !p%, colour%, i% ) ENDPROC : : : : DEF FN_blendPixel( bg%, fg%, i% ) LOCAL pFg%, pBg%, r_fg%, g_fg%, b_fg%, r_bg%, g_bg%, b_bg%, r%, g%, b% pFg% = ^fg% pBg% = ^bg% r_fg% = pFg%?2 r_bg% = pBg%?2 r% = r_bg% + (i%*(r_fg% - r_bg%) >> 16) g_fg% = pFg%?1 g_bg% = pBg%?1 g% = g_bg% + (i%*(g_fg% - g_bg%) >> 16) b_fg% = ?pFg% b_bg% = ?pBg% b% = b_bg% + (i%*(b_fg% - b_bg%) >> 16) = r%*&10000 + g%*&100 + b%
|
|
|
|
DEF PROC_line( x1#, y1#, x2#, y2#, C% ) LOCAL dx#, dy#, len#, step#, r# dx# = x2# - x1# dy# = y2# - y1# len# = SQR( dx#^2 + dy#^2 ) step# = 1.0 / len# FOR r# = 0.0 TO 1.0 STEP step# table{(N%)}.x# = x1# + r#*dx# table{(N%)}.y# = y1# + r#*dy# table{(N%)}.col% = C% N%+=1 NEXT ENDPROC
|
|
|
|
|
|
|
|
|
|
|