|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I do not understand this. The following macro
#macro GammaColort(Color,Gamma)
rgbt <pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
Color.transmit>
#end
gives a parse error: "Bad operands for period operators"
while the following macros work just fine:
#macro GammaColorf(Color,Gamma)
rgbf <pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
Color.filter>
#end
#macro GammaColorft(Color,Gamma)
rgbft <pow(Color.red,Gamma), pow(Color.green,Gamma),
pow(Color.blue,Gamma), Color.filter, Color.transmit>
#end
Can somebody tell me what I do wrong?
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
>Thomas de Groot on date 20/05/2010 09:11 wrote:
> I do not understand this. The following macro
>
> #macro GammaColort(Color,Gamma)
> rgbt<pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
> Color.transmit>
> #end
>
> gives a parse error: "Bad operands for period operators"
>
> while the following macros work just fine:
>
> #macro GammaColorf(Color,Gamma)
> rgbf<pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
> Color.filter>
> #end
>
> #macro GammaColorft(Color,Gamma)
> rgbft<pow(Color.red,Gamma), pow(Color.green,Gamma),
> pow(Color.blue,Gamma), Color.filter, Color.transmit>
> #end
>
> Can somebody tell me what I do wrong?
>
>
> Thomas
>
>
>
Perhaps your color doesn't have the transmit component.
An example:
with the color <0.8,0.6,0.7,0.5,0.8> the three macros works fine (I've
tested with 3.6.2 version).
With the color <0.8,0.6,0.7,0.5> I've the "Bad operands for period
operators" error for both GammaColort and GammaColorft macro.
Paolo
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 20.05.2010 09:11, schrieb Thomas de Groot:
> I do not understand this. The following macro
>
> #macro GammaColort(Color,Gamma)
> rgbt<pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
> Color.transmit>
> #end
>
> gives a parse error: "Bad operands for period operators"
>
> while the following macros work just fine:
>
> #macro GammaColorf(Color,Gamma)
> rgbf<pow(Color.red,Gamma), pow(Color.green,Gamma), pow(Color.blue,Gamma),
> Color.filter>
> #end
>
> #macro GammaColorft(Color,Gamma)
> rgbft<pow(Color.red,Gamma), pow(Color.green,Gamma),
> pow(Color.blue,Gamma), Color.filter, Color.transmit>
> #end
>
> Can somebody tell me what I do wrong?
I guess something's fishy about the values you pass into the macros.
For instance, if you call
GammaColort(<R,G,B,T>,G)
then at the time of the macro invocation POV-Ray has no way of knowing
that "T" is intended to represent a transmit component; to POV-Ray,
<R,G,B,T> is just another 4-component vector.
So when POV-Ray parses the GammaColort macro body, it will translate it to:
rgbt <
pow(<R,G,B,T>.red, G),
pow(<R,G,B,T>.green, G),
pow(<R,G,B,T>.blue, G),
pow(<R,G,B,T>.transmit)
>
Enter POV-Ray's bivalence regarding colors and vectors: To POV-Ray,
colors and vectors are just the same - with colors being vectors with up
to five components, ordered as <red,green,blue,filter,transmit> =
<x,y,z,t,_unnamed_> (note that "t" here denotes time, /not/ transmit).
Thus, when you specify "Color.transmit", you're actually accessing the
5th component of whatever vector expression "Color" happens to be.
But <R,G,B,T> only has 4 components. Duh!
The issue can easily be solved when considering that
rgbt <A,B,C,D>
is /fully/ equivalent to
<A,B,C,0,D>
Thus, you actually need only a single macro and use it as follows:
#macro GammaColor(Color,Gamma)
rgbft<pow(Color.red,Gamma), pow(Color.green,Gamma),
pow(Color.blue,Gamma), Color.filter, Color.transmit>
#end
...
#declare MyColor = GammaColor(rgbt <R,G,B,T>, G);
You can even use constructs like
#declare MyColor = GammaColor(red R transmit T, G);
because
red R transmit T
is just another way of writing
<R,0,0,0,T>
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thanks indeed Paolo and Christoph. I understand better now.
My error was to assume that in *rgbt*, the *t* would always be interpreted
by POV-Ray as a transmit value, which it is apparently not. This is a bit
confusing, but there it is. I seem to remember now that this has been
discussed before here, maybe a year ago.
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"clipka" <ano### [at] anonymousorg> schreef in bericht
news:4bf4f199$1@news.povray.org...
> Thus, you actually need only a single macro and use it as follows:
>
> #macro GammaColor(Color,Gamma)
> rgbft<pow(Color.red,Gamma), pow(Color.green,Gamma),
> pow(Color.blue,Gamma), Color.filter, Color.transmit>
> #end
> ...
> #declare MyColor = GammaColor(rgbt <R,G,B,T>, G);
>
Strange....
Now, when I declare the macro above at the start of my scene, I get again
the same parse error, within the macro declaration, with the cursor blinking
at Color.filter
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thomas de Groot wrote:
> Now, when I declare the macro above at the start of my scene, I get again
> the same parse error, within the macro declaration, with the cursor blinking
> at Color.filter
You should check all invocations of GammaColor in your scene file then.
You're likely calling it with a 3 component vector but without rgb.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Christian Froeschlin" <chr### [at] chrfrde> schreef in bericht
news:4bf65c9a$1@news.povray.org...
>
> You should check all invocations of GammaColor in your scene file then.
> You're likely calling it with a 3 component vector but without rgb.
Yes... that must be it because in a test scene this is exactly what makes
the error appear... Thanks! Good hint!
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 21.05.2010 13:11, schrieb Thomas de Groot:
>> You should check all invocations of GammaColor in your scene file then.
>> You're likely calling it with a 3 component vector but without rgb.
>
> Yes... that must be it because in a test scene this is exactly what makes
> the error appear... Thanks! Good hint!
Unless you really badly need the gamma-correction macro for a current
project, you may want to wait for the next beta anyway, which will
probably make you want to ditch your macros anyway.
I mean, who'll want to use macros when you can just write
pigment { color rgb <0.2,0.4,0.7> gamma 2.2 }
;-)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"clipka" <ano### [at] anonymousorg> schreef in bericht
news:4bf685a5$1@news.povray.org...
> Unless you really badly need the gamma-correction macro for a current
> project, you may want to wait for the next beta anyway, which will
> probably make you want to ditch your macros anyway.
>
> I mean, who'll want to use macros when you can just write
>
> pigment { color rgb <0.2,0.4,0.7> gamma 2.2 }
>
> ;-)
Of course, that would be much more sensible, but inthe mean time, and since
a few betas now, I have used the macros quite happily (except for that
stupid thing I posted about). However, with the next beta, of course I shall
be pleased to ditch my macros :-) . My workaround is an intermediate stage,
with some extra work to do but which "keeps me from the street" (as they say
here).
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Thomas de Groot" <tDOTdegroot@interDOTnlANOTHERDOTnet> wrote:
> "Christian Froeschlin" <chr### [at] chrfrde> schreef in bericht
> news:4bf65c9a$1@news.povray.org...
> >
> > You should check all invocations of GammaColor in your scene file then.
> > You're likely calling it with a 3 component vector but without rgb.
>
> Yes... that must be it because in a test scene this is exactly what makes
> the error appear... Thanks! Good hint!
>
> Thomas
You can also change the input vector to a 5 component color vector if you do
something like this:
#local OldVar = <1.0,0.5,0.2>;
Inside of the macro:
#local NewVar = color rgbft (<0,0,0,0> + OldVar);
Now NewVar is a 5 component color.
-Reactor
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|