|
 |
William F Pokorny <ano### [at] anonymous org> wrote:
> Attached an image of some more testing. It includes the fix for the
> segment blink out issue & that fix looks good thus far.
So what did you do?
in line 1082
x[n] = sqrt(r[n] * (r[n] * (r[n] * A + B) + C) + D);
I'd suggest changing that something like
x[n] = sqrt( fabs(r[n] * (r[n] * (r[n] * A + B) + C) + D) );
> Not going to go through the image in detail, but in answer to your
> question about on curve points going negative it looks like a no go
> without a deep dive and probable re-work of the current code.
I'd suggest the above, if you haven't already done that.
Also, it may have something to do with calculating the intersections.
There's a check on Radius2 that I saw, so see what happens when you change:
Lines 1110-1111
Radius1 = xmin;
Radius2 = xmax;
to use fabs()
> For reasons I don't understand, when I allow on curve points to go
> negative the camera ray direction affects results. This shown in the
> fourth row where the sor slowly disappears then reappears as rotated
> about x.
> The descending in y on curve points doesn't work at all.
Not surprising - all the checks for the control point order need to be
rewritten.
> You had mentioned not being able to flip the two control points in y.
> Where everything I'd tried to that point seemed to work.
I'll have to do some more experimenting when I get the chance.
> You also
> mentioned this bit of code in sor.cpp :
>
> if ((fabs(P[i+2][Y] - P[i][Y]) < gkMinIsectDepthReturned) ||
> (fabs(P[i+3][Y] - P[i+1][Y]) < gkMinIsectDepthReturned))
> {
> throw POV_EXCEPTION_STRING("Incorrect point in surface of revolution.");
> }
>
> I'm finding it is this run time check which sometimes doesn't allow
> control points flipping in y.
That def seems to be related to what you're seeing in those last 2 rows - since
the cp's are nearly coincident in y.
> The shapes with negative control points do break up more
> often, but as we found this can happen today with certain point lists.
Do you think as a quick fix, we could just add -ymin to all the values to
translate everything into the first quadrant, starting at y=0, and then
translate everything back after the math gets done?
Very nice that some of this is getting worked out after 30 years. :)
- BW
Post a reply to this message
|
 |