POV-Ray : Newsgroups : povray.advanced-users : #if(trace(....... : Re: #if(trace(....... Server Time
28 Jul 2024 12:26:27 EDT (-0400)
  Re: #if(trace(.......  
From: Roman Reiner
Date: 22 Nov 2005 12:30:00
Message: <web.4383551c50cf0a77b293c4340@news.povray.org>
"Veggiet" <nomail@nomail> wrote:
> Hi,
>    I'm not sure if this goes in the advanced category or not, but I'm having
> a problem. I trying to make a snow casting macro, and for this I using
> nested loops, but I don't want to have a blob created if a collision isn't
> made so here is the conext:
>
> [code]
> #declare trval = trace(Objapply, coords1, coords2, <0,0,0>);
> #if(trval != <0,0,0>)
> ....
> #end
> [/code]
>
> It highlights the #if line and comes up with
> "Parse Error: Float expected but vector or color expression found."
>
> and If I change the expression to "(trval != 0)" It does the same thing.

this should work:

[code]
#declare Norm = <0,0,0>;
#declare trval = trace(Objapply, coords1, coords2, Norm);
#if(vlength(Norm)!=0)
.....
#end
[/code]

two faults. first: when an object was hit then the intersection point will
be stored in trval and the normalvector at the intersectionpoint will be
stored in the (optional) fourth indentifier. so when you want to know if an
object was hit or not you have to test that vector (Norm in the example)
and not trval. second fault: you can't compare vectors like you did. either
you compare there length (which works when you test for zero, as in the
example) or you use VEq(V1, V2) in math.inc

Roman


Post a reply to this message

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