[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    {
     RK> Is there anyone out there who has anything, on how to do PHONG shading in
     RK> Pascal. (If it's possible in Pas..I've seen it done in C, but never in
     RK> Pas)         ^^^.. I didn't have the time to grab the guys source
     RK> code...:(

    However I quote this message because I have some plasma stuff!

    Here's a little configurable plasma unit! }

    UNIT PLASMA;

    Interface

    Procedure InitPlasma(NbLines : BYTE);
    Procedure DoPlasma(xx, yy, xs, ys : WORD);
    Procedure ClosePlasma;

    VAR
      FT :ARRAY [0..511] OF BYTE;
      SINT :ARRAY [0..255] OF BYTE;
      I1,A,B,D,C,OD,COLOR :BYTE;
      X,Y,K,I :WORD;
      clong   : longint;

    Implementation

    uses crt;

    Procedure ClosePlasma; assembler;
      ASM
        mov dx,3d4h
        mov al,9
        out dx,al
        inc dx
        in al,dx
        and al,0e0h
        add al,2
        out dx,al
      END;

    Procedure InitPlasma(nblines : byte);
    Begin
      ASM
        mov dx,3d4h
        mov al,9
        out dx,al
        inc dx
        in al,dx
        and al,0e0h
        add al,nblines
        out dx,al
      END;
      {DO TABLES}
      FOR I:=0 TO 511 DO FT [I]:=ROUND (64+63*SIN (I/40.74));
      FOR I:=0 TO 255 DO SINT [I]:=ROUND (256+255*SIN (I/40.74));
    End;

    Procedure DoPlasma;
    BEGIN
      INC (I1);                    {GRID COUNTER}
      DEC (C,2);
      INC (OD,1);
      D:=OD;
      FOR Y:=yy TO yy+ys DO
        BEGIN
           K:=Y*320{+Y AND 1};     {CALCULATE OFFSET AND ADD ONE EVERY SECOND LINE}
           {K:=K-(I1 AND 1)*320;}  {MOVE GRID ONE PIXEL DOWN EVERY SECOND FRAME}
           INC (D,2);
           A:=SINT [(C+Y) AND 255];
           B:=SINT [(D) AND 255];
             FOR X:=xx TO xx+xs DO
               BEGIN
                 COLOR:=FT[A+B] + FT[Y+B];
                 clong:= color shl 24 + color shl 16 + color shl 8 + color;
                 asm
                   mov ax, 0a000h
                   mov es, ax
                   mov di, k
                   mov ah, color
                   mov al, ah
                   stosw
                   stosw
                  { mov es:[di], ax   }
                 end;
                 INC (A,1+COLOR SHR 7);
                 INC (B,2);
                 INC (K,4);
               END;
        END;
    END;

    Begin
    End.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]