POV-Ray : Newsgroups : povray.newusers : adding 2 pigments : Re: adding 2 pigments Server Time
4 Nov 2024 19:18:49 EST (-0500)
  Re: adding 2 pigments  
From: Tor Olav Kristensen
Date: 16 Oct 2001 14:49:25
Message: <3BCC80B5.51E34E83@hotmail.com>
Elias Pschernig wrote:
> 
> > You can add, subtract, divide and multiply pigment vectors the same as any
> > other vector:
> >
> > rgb <1,1,1>*5
> > rgb <1,0,0>+<1,1,0>
> > rgb <1,1,1>*<1,2,1>
> > ....etc.
> 
> Yes, vectors, but not pigments. Not even pigment functions. By now I think I
> already have the simplest solution for what I want to do, but it is very
> complicated:
> 
> (All it does is adding two pigments)
>...

>...
> Now it is understandable why I thought there's a simpler solution I guess :)
> I still hope someone can simplify it..

Elias, see my code below.

It isn't tested much...
- Maybe you can give it a few tests ?


Tor Olav


// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =
// Copyright 2001 by Tor Olav Kristensen
// mailto:tor### [at] hotmailcom
// http://www.crosswinds.net/~tok
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =

#version 3.5;

#include "colors.inc"

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =

#macro MixPigments(Pigment1, Pigment2)

  #local Alpha = color rgbt <0, 0, 0, 1>;
  #local PFn1 = function { pigment { Pigment1 } }
  #local PFn2 = function { pigment { Pigment2 } }
  #local R_Pigment =
  pigment {
    function { PFn1(x, y, z).x + PFn2(x, y, z).x }
    color_map { [ 0 color Black ] [ 1 color 4*Red   ] }
  }
  #local G_Pigment =
  pigment {
    function { PFn1(x, y, z).y + PFn2(x, y, z).y }
    color_map { [ 0 color Black ] [ 1 color 4*Green ] }
  }
  #local B_Pigment =
  pigment {
    function { PFn1(x, y, z).z + PFn2(x, y, z).z }
    color_map { [ 0 color Black ] [ 1 color 4*Blue  ] }
  }
  #local T_Pigment =
  pigment {
    function { PFn1(x, y, z).t + PFn2(x, y, z).t }
    color_map { [ 0 color Black ] [ 1 color 4*Alpha ] }
  }
  #local MixedPigment =
  pigment {
     average
     pigment_map {
        [ R_Pigment ]
        [ G_Pigment ]
        [ B_Pigment ]
        [ T_Pigment ]
     }       
  }
  
  MixedPigment

#end // macro MixPigments

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =

#declare InputPigment1 =
pigment {
  bozo
  scale 0.3
  color_map {
    [ 0 color Cyan ]
    [ 1 color Magenta ]
  }
}
  

#declare InputPigment2 =
pigment {
  gradient y
  turbulence 0.3
  color_map {
    [ 0 color Yellow ]
    [ 1 color Blue ]
  }
}


sphere {
  <0, 0, 0>, 1
  pigment { MixPigments(InputPigment1, InputPigment2) }
}

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =

light_source { <1, 2, -2>*100 color White }

camera {
  location <0, 0, -5>
  look_at <0, 0, 0>
}

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =


Post a reply to this message

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