home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaDemoCD2.iso / ASCII / TEXTE / SCENE / AMIGA / DC5VHTML.LHA / DC5 / Mag5 / PhongShading.AMOS / PhongShading.amosSourceCode
Encoding:
AMOS Source Code  |  1997-10-13  |  1.4 KB  |  89 lines

  1. ' Shaded Spheres!
  2.  
  3. Screen Open 0,320,200,32,Lowres
  4. Curs Off 
  5. Flash Off 
  6. Cls 0
  7.  
  8. For K=0 To 15
  9.    Colour K,K*(1+16+256)
  10. Next 
  11.  
  12. KD=0.5*256
  13. KS=0.5*256
  14. SPECINDEX=2
  15. XCENTRE=160
  16. YCENTRE=100
  17. RADIUS=40
  18. Timer=0
  19. Gosub SHADESPHERE
  20. T=Timer
  21. Pen 15
  22. Print T
  23. '534 
  24. '522 
  25. '515 
  26. '504 
  27. '458 
  28. '456 
  29. '453 
  30. End 
  31.  
  32. SHADESPHERE:
  33.  
  34. ILIGHT=140
  35. K#=70.0
  36. IAKA=0.2*256
  37. HX#=0.325058
  38. HY#=0.325058
  39. HZ#=0.888074
  40. DX=110
  41. DY=110
  42. DZ=110
  43. LX#=0.57735
  44. LY#=0.57735
  45. LZ#=0.57735
  46.  
  47. RSQUARE=RADIUS^2
  48. AMBIENTTERM=IAKA
  49. For Y=-RADIUS To RADIUS
  50.    YSQUARE=Y^2
  51.    For X=-RADIUS To RADIUS
  52.       XSQUARE=X^2
  53.       If XSQUARE+YSQUARE<RSQUARE
  54.          ZSQUARE=RSQUARE-XSQUARE-YSQUARE
  55.          Z=Sqr(ZSQUARE)
  56.          DENOM#=Sqr(XSQUARE+YSQUARE+ZSQUARE)
  57.          XN#=X/DENOM#
  58.          YN#=Y/DENOM#
  59.          ZN#=Z/DENOM#
  60.          Gosub CALCULATELNANDNNH
  61.          If LDOTN#<=0
  62.             IG=AMBIENTTERM
  63.             IRB=0
  64.          Else 
  65.             DISTFACTOR#=ILIGHT/DIST#
  66.             DIFFUSETERM=DISTFACTOR#*KD*LDOTN#
  67.             SPECULARTERM=DISTFACTOR#*KS*NNH#
  68.             IG=AMBIENTTERM+DIFFUSETERM+SPECULARTERM
  69.             IRB=SPECULARTERM
  70.          End If 
  71.          'C=Min(15,IG/16) 
  72.          C=IG/16
  73.           Extension_12_036E XCENTRE+X,YCENTRE+Y,C
  74.       End If 
  75.    Next 
  76. Next 
  77. Return 
  78.  
  79. CALCULATELNANDNNH:
  80. LDOTN#=(XN#*LX#+YN#*LY#+ZN#*LZ#)
  81. If LDOTN#<0
  82.    LDOTN#=0
  83. Else 
  84.    DIST#=Sqr((DX-X)^2+(DY-Y)^2+(DZ-Z)^2)+K#
  85.    NH#=HX#*XN#+HY#*YN#+HZ#*ZN#
  86.    'NNH#=Exp(SPECINDEX*Ln(NH#)) 
  87.    NNH#=NH#^SPECINDEX
  88. End If 
  89. Return