POV-Ray : Newsgroups : povray.general : Blob : Toward a solution : Blob : Toward a solution Server Time
20 Nov 2024 12:47:14 EST (-0500)
  Blob : Toward a solution  
From: Jérôme Grimbert
Date: 7 Sep 2001 15:06:47
Message: <3B991C90.D715B7A3@free.fr>
[FU2:p.g, crossposted in p.b-t]

Thanks to Ken and our exchange about SOR in p.beta-test, 
I got back to the source of DKBTrace 2.12 as well as Povray 2.0.

First point: Ken, you were right; no SOR in these versions.

But it happened that blob was already there in pov 2.0
And I had that small scene with a bogus blob just lying
in a directory... So I recompile pov 2.0 (a far lot less
source files !) and give it a try. 

BINGO !!! The defect was not present in 2.0, but is in 3.1.
So, I went for a comparaison of the blob source file... I
was expecting a bug in the root-solver... Wrong again!
It is the bezier optimisation which seems to be the cause.

Have a nice week-end.


Oh Yes,
unofficial Povray-3.1g, Linux 2.2.19, Pentium 180MHz, 256Mb


demo scene:
-----------

camera { location <.75,1.5,2.6>
direction -8*z
up y
right 4/3*x
look_at <0,0,0> 
}
blob {
   threshold 0.6
   component 1,1, <0.75, 0, 0>
   component  1,1,<-0.375, 0.64952, 0>
   component  1,1,<-0.375, -0.64952, 0>
  texture { pigment { color rgb <1,1,0> } }
}

light_source { <0,60,30> color rgb <1,1,1> }
light_source { <0,0,0> color rgb <1,1,1> }
light_source { <0,0,5> color rgb <1,1,1> }







Here my patch/kludge/modification:
----------------------------------

*** sourc/blob.c	Fri May 11 18:57:23 2001
--- source/blob.c	Fri Sep  7 20:16:47 2001
***************
*** 504,504 ****
        }
      }
  
      /*
       * If the following intersection lies close to the current intersection
       * then first add/subtract next region before testing. [DB 7/94] 
       */
      if ((i + 1 < cnt) && (fabs(intervals[i].bound - intervals[i + 1].bound) <
EPSILON))
      {
        continue;
--- 510,511 ----
        }
      }
  
+ #if 0
      /*
       * If the following intersection lies close to the current intersection
       * then first add/subtract next region before testing. [DB 7/94] 
       */
      if ((i + 1 < cnt) && (fabs(intervals[i].bound - intervals[i + 1].bound) <
EPSILON))
      {
        continue;
***************
*** 546,546 ****
      {
        continue;
      }
! 
      /*
       * Now we could do bezier clipping to find the roots
       * but I have no idea how this works. [DB 2/95]
--- 553,553 ----
      {
        continue;
      }
! #endif
      /*
       * Now we could do bezier clipping to find the roots
       * but I have no idea how this works. [DB 2/95]


Post a reply to this message

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