home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / povsrc.sit / SOURCE / COLOUR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-03  |  2.5 KB  |  84 lines

  1. /****************************************************************************
  2. *                   colour.c
  3. *
  4. *  This module implements routines to manipulate colours.
  5. *
  6. *  from Persistence of Vision Raytracer 
  7. *  Copyright 1992 Persistence of Vision Team
  8. *---------------------------------------------------------------------------
  9. *  Copying, distribution and legal info is in the file povlegal.doc which
  10. *  should be distributed with this file. If povlegal.doc is not available
  11. *  or for more info please contact:
  12. *
  13. *       Drew Wells [POV-Team Leader] 
  14. *       CIS: 73767,1244  Internet: 73767.1244@compuserve.com
  15. *       Phone: (213) 254-4041
  16. * This program is based on the popular DKB raytracer version 2.12.
  17. * DKBTrace was originally written by David K. Buck.
  18. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  19. *
  20. *****************************************************************************/
  21.  
  22.  
  23. #include "frame.h"
  24. #include "vector.h"
  25. #include "povproto.h"
  26.  
  27. #define FABS(x) ((x) < 0.0 ? (0.0 - (x)) : (x))
  28.  
  29. DBL Colour_Distance (colour1, colour2)
  30. COLOUR *colour1, *colour2;
  31. {
  32.    return (FABS (colour1->Red - colour2->Red)
  33.       + FABS (colour1->Green - colour2->Green)
  34.       + FABS (colour1->Blue - colour2->Blue));
  35. }
  36.  
  37. void Add_Colour (result, colour1, colour2)
  38. COLOUR *result, *colour1, *colour2;
  39. {
  40.    result->Red = colour1->Red + colour2->Red;
  41.    result->Green = colour1->Green + colour2->Green;
  42.    result->Blue = colour1->Blue + colour2->Blue;
  43.    result->Alpha = colour1->Alpha + colour2->Alpha;
  44. }
  45.  
  46. void Scale_Colour (result, colour, factor)
  47. COLOUR *result, *colour;
  48. DBL factor;
  49. {
  50.    result->Red = colour->Red * factor;
  51.    result->Green = colour->Green * factor;
  52.    result->Blue = colour->Blue * factor;
  53.    result->Alpha = colour->Alpha * factor;
  54. }
  55.  
  56. void Clip_Colour (result, colour)
  57. COLOUR *result, *colour;
  58. {
  59.    if (colour -> Red > 1.0)
  60.       result -> Red = 1.0;
  61.    else if (colour -> Red < 0.0)
  62.       result -> Red = 0.0;
  63.    else result -> Red = colour -> Red;
  64.  
  65.       if (colour -> Green > 1.0)
  66.          result -> Green = 1.0;
  67.       else if (colour -> Green < 0.0)
  68.          result -> Green = 0.0;
  69.       else result -> Green = colour -> Green;
  70.  
  71.       if (colour -> Blue > 1.0)
  72.          result -> Blue = 1.0;
  73.       else if (colour -> Blue < 0.0)
  74.          result -> Blue = 0.0;
  75.       else result -> Blue = colour -> Blue;
  76.  
  77.       if (colour -> Alpha > 1.0)
  78.          result -> Alpha = 1.0;
  79.       else if (colour -> Alpha < 0.0)
  80.          result -> Alpha = 0.0;
  81.       else result -> Alpha = colour -> Alpha;
  82. }
  83.