POV-Ray

The Persistence of Vision Raytracer (POV-Ray).

This is the legacy Bug Tracking System for the POV-Ray project. Bugs listed here are being migrated to our github issue tracker. Please refer to that for new reports or updates to existing ones on this system.

Tasklist

FS#24 - isosurface, bounding box & threads

Attached to Project: POV-Ray
Opened by Grimbert Jérôme (Le_Forgeron) - Monday, 11 May 2009, 17:02 GMT
Last edited by Chris Cason (chrisc) - Friday, 07 August 2009, 06:27 GMT
Task Type Definite Bug
Category Backend → Geometric Primitives
Status Closed
Assigned To Chris Cason (chrisc)
Operating System All
Severity Critical
Priority Normal
Reported Version 3.70 beta 32
Due in Version 3.70 beta 33
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

Details

Linux beta 32, 64bits, compiled from sources.

povray -w800 -h600 +a0.3 +kfi1 +kff78
-L/usr/local/share/povray-3.7/scenes/incdemo
-Ii_internal.pov +WT5 +R4 +AM1 +MB1

Important issue: +WT5 +MB1

Seems Fine for +WT1 +MB1
Also fine for +WT5 +MB9

The intersection with the containing box displays some two-shades of grey
random checkered patterns.
Size of square looks like size of renderering thread. Position too.

Impacted frames (of 78):
01, 02, 03, 30, 48, 74, 76.

This task depends upon

Closed by  Chris Cason (chrisc)
Friday, 07 August 2009, 06:27 GMT
Reason for closing:  Fixed
Comment by Grimbert Jérôme (Le_Forgeron) - Monday, 11 May 2009, 17:07 GMT

Bugs is due to Bounding box handling in the isosurface object: on some condition, an intersection can be left on the IStack.
As the IStack is not reset, this leads to issue for color computation for the thread. Hence the square pattern.

Proposal of solution: pop the Intersection which has been added locally, so as to behave nicely at the global level.

diff -r da476cece3cc -r aaa984181c5b source/backend/shape/isosurf.cpp
--- a/source/backend/shape/isosurf.cpp  Mon Apr 13 14:10:46 2009 +0200
+++ b/source/backend/shape/isosurf.cpp  Mon Apr 13 20:16:24 2009 +0200
@@ -276,7 +276,13 @@
                tmax = Depth2 = min(Depth2, BOUND_HUGE);
                tmin = Depth1 = min(Depth2, Depth1);
                if((tmax - tmin) < accuracy)
-                       return (false);
+                {
+                   if (IFound==true) 
+                   {
+                      Depth_Stack->pop();
+                   }
+                   return (false);
+                }
                Thread->Stats[Ray_IsoSurface_Tests]++;
                if((Depth1 < accuracy) && (Thread->isosurfaceData->Inv3 == 1))
                {

Comment by Christoph Lipka (clipka) - Sunday, 24 May 2009, 18:03 GMT

I checked most other objects' All_Intersection handlers, and they seemed to be "clean" regarding this issue, except for BicubicPatch and HField which I didn't check in detail.

Comment by Christoph Lipka (clipka) - Sunday, 24 May 2009, 18:58 GMT

Fixed with changelist 4790

Loading...