POV-Ray : Newsgroups : povray.object-collection : SharkD's HSV,HSL, etc. : Re: SharkD's HSV,HSL, etc. Server Time
20 Apr 2024 10:47:39 EDT (-0400)
  Re: SharkD's HSV,HSL, etc.  
From: Chambers
Date: 4 Jul 2008 16:04:22
Message: <486e8246$1@news.povray.org>
Karl Anders wrote:
> I feel that should be changed to
> color_map{
>    [ 0   rgb < 1, 0, 0 > ]
>    [ 1/6 rgb < 1, 1, 0 > ]
>    [ 2/6 rgb < 0, 1, 0 > ]
>    [ 3/6 rgb < 0, 1, 1 > ]
>    [ 4/6 rgb < 0, 0, 1 > ]
>    [ 5/6 rgb < 1, 0, 1 > ]
>    [ 1   rgb < 1, 0, 0 > ]
> }

Or, you could change it to this:
-----
#macro _lerp(a,b,_t)
   (a+(b-a)*_t)
#end

#macro _lerpColor(a, b, _t)
   #local _color = _lerp(a,b,_t);
   #local _magnitude = _color.x + _color.y + _color.z;
   #local _scale = 3 / _magnitude;
   _color * _scale
#end

#macro _stepColor(ta,ca,tb,cb,nSteps)
   #local _count = 0;
   #while (_count < nSteps)
     [_lerp(ta,tb,_count/nSteps) color rgb _lerpColor(ca,cb,_count/nSteps)]
   #local _count = _count + 1;
   #end
#end

#declare ring3 = pigment {
   radial
   color_map {
     _stepColor( 0/6, rgb x,   1/6, rgb x+y, 42 )
     _stepColor( 1/6, rgb x+y, 2/6, rgb y,   42 )
     _stepColor( 2/6, rgb y,   3/6, rgb y+z, 42 )
     _stepColor( 3/6, rgb y+z, 4/6, rgb z,   42 )
     _stepColor( 4/6, rgb z,   5/6, rgb z+x, 42 )
     _stepColor( 5/6, rgb z+x, 6/6, rgb x,   42 )
   }
}
-----
This interpolates between the various colors, making sure that each 
steps has a constant saturation level (I used 3 here, as that would be 
the value of rgb 1 (1+1+1), but any can be used for the same effect).

...Chambers


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.