|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I want to use an array inside a function, for example:
function(x,y,z){MYARRAY[][]}
I can hard code an array index, and it is fine:
eg. function(x,y,z){MYARRAY[2][3]}
, however I can't create an array index from a function. I get an error "Float
expected but vector or color expression found"
e.g. function(x,y,z){MYARRAY[max(min(int(x),9),0)][max(min(int(y),9),0)]}
parsing the function inside the array indices we return valid integer indices,
but it appears that POV is not parsing it this way: rather than precalculating
the function using the "x" and "y" values from the function, it is seeing them
as x and y vectors (<1,0,0>, <0,1,0>) which gives the error. Changing to a
different reference from x,y,z eg.
e.g. function(xx,yy,zz){MYARRAY[max(min(int(xx),9),0)][max(min(int(yy),9),0)]}
results in an undeclared indetifier 'xx' error.
I there some way I can work around this and force the function inside to be
calculated into my index value before the array tries to parse it?
-tgq
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Trevor G Quayle" <Tin### [at] hotmailcom> wrote:
> I want to use an array inside a function, for example:
>
> function(x,y,z){MYARRAY[][]}
>
> I can hard code an array index, and it is fine:
>
> eg. function(x,y,z){MYARRAY[2][3]}
>
> , however I can't create an array index from a function. I get an error "Float
> expected but vector or color expression found"
>
> e.g. function(x,y,z){MYARRAY[max(min(int(x),9),0)][max(min(int(y),9),0)]}
>
> parsing the function inside the array indices we return valid integer indices,
> but it appears that POV is not parsing it this way: rather than precalculating
> the function using the "x" and "y" values from the function, it is seeing them
> as x and y vectors (<1,0,0>, <0,1,0>) which gives the error. Changing to a
> different reference from x,y,z eg.
>
> e.g. function(xx,yy,zz){MYARRAY[max(min(int(xx),9),0)][max(min(int(yy),9),0)]}
>
> results in an undeclared indetifier 'xx' error.
>
> I there some way I can work around this and force the function inside to be
> calculated into my index value before the array tries to parse it?
>
> -tgq
As far as I'm aware it simply can't be done. Functions and the SDL are basically
two completely different things that are interpreted at different times.
When I ran into this problem, I worked around it by stuffing my array values
into a spline, then did a spline lookup inside my function. Perhaps you can get
that trick to work for you too.
Cheers,
Edouard.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Edouard" <pov### [at] edouardinfo> wrote:
> "Trevor G Quayle" <Tin### [at] hotmailcom> wrote:
> > I want to use an array inside a function, for example:
> >
> > function(x,y,z){MYARRAY[][]}
> >
> > I can hard code an array index, and it is fine:
> >
> > eg. function(x,y,z){MYARRAY[2][3]}
> >
> > , however I can't create an array index from a function. I get an error "Float
> > expected but vector or color expression found"
> >
> > e.g. function(x,y,z){MYARRAY[max(min(int(x),9),0)][max(min(int(y),9),0)]}
> >
> > parsing the function inside the array indices we return valid integer indices,
> > but it appears that POV is not parsing it this way: rather than precalculating
> > the function using the "x" and "y" values from the function, it is seeing them
> > as x and y vectors (<1,0,0>, <0,1,0>) which gives the error. Changing to a
> > different reference from x,y,z eg.
> >
> > e.g. function(xx,yy,zz){MYARRAY[max(min(int(xx),9),0)][max(min(int(yy),9),0)]}
> >
> > results in an undeclared indetifier 'xx' error.
> >
> > I there some way I can work around this and force the function inside to be
> > calculated into my index value before the array tries to parse it?
> >
> > -tgq
>
> As far as I'm aware it simply can't be done. Functions and the SDL are basically
> two completely different things that are interpreted at different times.
>
> When I ran into this problem, I worked around it by stuffing my array values
> into a spline, then did a spline lookup inside my function. Perhaps you can get
> that trick to work for you too.
>
> Cheers,
> Edouard.
I figured it couldn't be done directly. The only problem with a spline is that
in reality I can have a lot of entries (e.g. for a 400x400 array, 160,000), not
sure if there is a limit to the number of entries allowed in a spline.
I have found a solution for now: export my array to a df3 file and use the
density_file pattern to work my function. Not the most elegant as I'd prefer to
be all internal, but it is working and the render speed-up I was looking for is
there, and for a bonus, I can see how the interpolation can help me smooth it
out.
-tgq
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 16.03.2011 17:07, schrieb Trevor G Quayle:
> I want to use an array inside a function, for example:
>
> function(x,y,z){MYARRAY[][]}
>
> I can hard code an array index, and it is fine:
>
> eg. function(x,y,z){MYARRAY[2][3]}
>
> , however I can't create an array index from a function. I get an error "Float
> expected but vector or color expression found"
>
> e.g. function(x,y,z){MYARRAY[max(min(int(x),9),0)][max(min(int(y),9),0)]}
Note that inside a function declaration, any and all variables (except
for references to the function parameters) are evaluated at parse time;
this is also true for array variables. But at parse time the function
parameters x and y are unknown for obvious reasons.
BTW, evaluation of the variables is delegated to the general SDL parser,
not the specialized function syntax parser; therefore in your case x and
y are interpreted as the respective axis vectors rather than the
function parameters.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
clipka <ano### [at] anonymousorg> wrote:
> Am 16.03.2011 17:07, schrieb Trevor G Quayle:
> > I want to use an array inside a function, for example:
> >
> > function(x,y,z){MYARRAY[][]}
> >
> > I can hard code an array index, and it is fine:
> >
> > eg. function(x,y,z){MYARRAY[2][3]}
> >
> > , however I can't create an array index from a function. I get an error "Float
> > expected but vector or color expression found"
> >
> > e.g. function(x,y,z){MYARRAY[max(min(int(x),9),0)][max(min(int(y),9),0)]}
>
> Note that inside a function declaration, any and all variables (except
> for references to the function parameters) are evaluated at parse time;
> this is also true for array variables. But at parse time the function
> parameters x and y are unknown for obvious reasons.
>
> BTW, evaluation of the variables is delegated to the general SDL parser,
> not the specialized function syntax parser; therefore in your case x and
> y are interpreted as the respective axis vectors rather than the
> function parameters.
I figured as much and was hoping for a direct workaround that I was missing.
Regardless, I have found an alternate solution that suits my current
requirements.
-tgq
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|