POV-Ray : Newsgroups : povray.general : Pigment multiplication : Re: Pigment multiplication Server Time
31 Jul 2024 16:24:47 EDT (-0400)
  Re: Pigment multiplication  
From: Trevor G Quayle
Date: 14 Dec 2006 15:55:00
Message: <web.4581b99fe92a14b7c150d4c10@news.povray.org>
FlyerX <fly### [at] yahoocom> wrote:
> Thanks for the code. I think it should work but when I try to use in
> POV-Ray 3.6.1 (Win32) the FRed declaration stops with "Expected operand,
> colour identifier found instead". After reading about the function on
> the documentation I could not see what was wrong. I though that maybe
> POV-Ray though it was a color instead of a float so I enclosed the
> PIMAGE().red and Mult.red in parenthesis but that did not work.
>
> FlyerX

Oops, didn't test before I posted.  A couple of errors.  First I missed a
bracket on the function declaration.  Second, I guess Mult can't be passed
as a colour and extract the colour channels like that.  Instead you can
predetermine them:

#declare PIMAGE = function {pigment{image_map {jpeg "body_01.jpg"
interpolate 2}}}

#declare Mult=rgb <1,1,1>; //multiplier colour
#declare MR=Mult.red;
#declare MG=Mult.green;
#declare MB=Mult.blue;


//r,g,b components need to be calculated individually as functions can't
carry vectors:
#declare FRed=function (x,y,z) {PIMAGE(x,y,z).red*MR}
#declare FGrn=function (x,y,z) {PIMAGE(x,y,z).green*MG}
#declare FBlu=function (x,y,z) {PIMAGE(x,y,z).blue*MB}

//assemble using average: (colours multiplied by 3 so they average to 1)
#declare Pig=
pigment{average
  pigment_map{
    [function{FRed(x,y,z)*3} color_map{[0 rgb 0][1 rgb <1,0,0>]}]
    [function{FGrn(x,y,z)*3} color_map{[0 rgb 0][1 rgb <0,1,0>]}]
    [function{FBlu(x,y,z)*3} color_map{[0 rgb 0][1 rgb <0,0,1>]}]
  }
}


-tgq


Post a reply to this message

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