![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
The following paraboloid renders correctly:
intersection
{ quadric { <1, 0, 1>, <0, 0, 0>, <0, 1, 0>, -1 }
cylinder { 0, y, 1 }
}
However, when I extend the clipping cylinder downward:
intersection
{ quadric { <1, 0, 1>, <0, 0, 0>, <0, 1, 0>, -1 }
cylinder { -y, y, 1 }
}
the object disappears completely in POV-Ray 3.7 and 3.7.1. In POV-Ray
3.6.1, it renders as expected.
POV-Ray 3.7.0.unofficial
POV-Ray 3.7.1-alpha.8150025.unofficial
openSUSE 13.2 GNU/Linux
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Cousin Ricky
Subject: Re: Intersection causes quadric to disappear
Date: 26 Jul 2015 12:29:59
Message: <55b50b07@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
On 07/25/2015 10:25 AM, Cousin Ricky wrote:
> The following paraboloid renders correctly:
>
> [snip]
>
> the object disappears completely in POV-Ray 3.7 and 3.7.1. In POV-Ray
> 3.6.1, it renders as expected.
>
> POV-Ray 3.7.0.unofficial
> POV-Ray 3.7.1-alpha.8150025.unofficial
> openSUSE 13.2 GNU/Linux
Here is a complete scene demonstrating the problem:
----------[BEGIN CODE]----------
// +w480 +h240
#version 3.6; //[sic]
global_settings { assumed_gamma 1 }
camera
{ location <0, 1, -7.5958>
look_at <0, 1, 0>
right 2 * x
up y
angle 43.1038
}
#default { finish { diffuse 0.6 ambient rgb 0.15618 } }
light_source
{ <-4.3125, 9.6250, -7.4695>,
rgb 6856.3
fade_power 2 fade_distance 0.10417
spotlight point_at <0, 1, 0> radius 45 falloff 90
}
box
{ -<9, 11, 9>, <9, 11, 9>
pigment { rgb 1 }
}
plane
{ y, 0
pigment { checker rgb 0.05 rgb 1 }
}
// OK in POV-Ray 3.6 and 3.7
intersection
{ quadric { <1, 0, 1>, <0, 0, 0>, <0, 1, 0>, -1 }
cylinder { 0, y, 1 }
pigment { green 0.5 }
translate <-1.25, 1, 0>
}
// OK in POV-Ray 3.6; not rendered in 3.7
intersection
{ quadric { <1, 0, 1>, <0, 0, 0>, <0, 1, 0>, -1 }
cylinder { -y, y, 1 }
pigment { green 0.5 }
translate <1.25, 1, 0>
}
-----------[END CODE]-----------
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Le 26/07/2015 18:30, Cousin Ricky a écrit :
> On 07/25/2015 10:25 AM, Cousin Ricky wrote:
>> The following paraboloid renders correctly:
>>
>> [snip]
>>
>> the object disappears completely in POV-Ray 3.7 and 3.7.1. In
>> POV-Ray 3.6.1, it renders as expected.
>>
>> POV-Ray 3.7.0.unofficial POV-Ray 3.7.1-alpha.8150025.unofficial
>> openSUSE 13.2 GNU/Linux
>
Confirmed on Ubuntu 15.04 too.
3.6.1 needed a fix on png_pov.cpp (to comment png_write_finish_row
declaration and call, as it was internal to libpng 1.0 and no more
present in current 1.2) to compile now.
The stable and master version of Povray 3.7 are impacted (as well as
my own derivatives)
For 3.7
Box 1553561 1553561 100.00
Cone/Cylinder 1767346 180868 10.23
CSG Intersection 1767346 79691 4.51
Plane 1553561 520176 33.48
Quadric 1767346 515067 29.14
Bounding Box 3107122 1553561 50.00
For 3.6.1
Box 1382184 1382184 100.00
Cone/Cylinder 683555 371945 54.41
CSG Intersection 683555 195292 28.57
Plane 1382184 442620 32.02
Quadric 683555 499054 73.01
Bounding Box 1878629 1856588 98.83
Light Buffer 3357640 2222801 66.20
Vista Buffer 2937947 2424601 82.53
Interesting 3.7 : if the cylinder is { -y/2, y, 1 }, the render is fine.
(it works also with -y*0.999 !)
Box 1472708 1472708 100.00
Cone/Cylinder 3157892 400035 12.67
CSG Intersection 3157892 211950 6.71
Plane 1472708 470874 31.97
Quadric 3157892 1059059 33.54
Bounding Box 1472708 1472708 100.00
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iJwEAQEIAAYFAlW2dBQACgkQhKAm8mTpkW3g3AP+NaF6Z/rNgVi5YV9z/YPgkp44
1Yfh/r0A6z2vzd88zqBqyU+ABoU1ETlOU14GEY/Wv5L6w1G3awXx55e/kbptT3dy
JSSUM8VU2ClagBdkBzg6BmsTswMvHaLqYsw+mDwXaYoLp7RuQLtGJJrCdJI7BlIW
TciWNFxPlJjwrSxI28k=
=QNJM
-----END PGP SIGNATURE-----
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Le 27/07/2015 20:10, Le_Forgeron a écrit :
> Le 26/07/2015 18:30, Cousin Ricky a écrit :
>> On 07/25/2015 10:25 AM, Cousin Ricky wrote:
>>> The following paraboloid renders correctly:
>>>
>>> [snip]
>>>
>>> the object disappears completely in POV-Ray 3.7 and 3.7.1. In
>>> POV-Ray 3.6.1, it renders as expected.
>>>
>>> POV-Ray 3.7.0.unofficial POV-Ray 3.7.1-alpha.8150025.unofficial
>>> openSUSE 13.2 GNU/Linux
>
>
> Confirmed on Ubuntu 15.04 too.
>
Looking at the bounding box, with -0.999*y :
Min : -10000000000.0000,-10000000000.0000,-10000000000.0000
Max : 10000000000.0000,10000000000.0000,10000000000.0000
whereas with -y :
Min : 1.2500,0.0000,0.0000
Max : 1.2500,0.0000,0.0000
Compared to 3.6.1 with -y :
Min : 0.2500,0.0000,-1.0000
Max : 2.2500,2.0000,1.0000
and 3.6.1 with -y*0.999 :
Min : 0.2500,0.0010,-1.0000
Max : 2.2500,2.0000,1.0000
Raw conclusion so far: the bounding box computation in 3.7 get
something wrong. It might be in intersection/csg or cylinder. (as
quadric is kind of infinite, it is unlikely to be involved... but a
look does not cost that much either).
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iJwEAQEIAAYFAlW2eYcACgkQhKAm8mTpkW1zBQQAm771Vzlt7JvAFHw5Fr9Zz99o
MtAmUJGqg12Yl6ZcbaPUhekdCYHsl4uv+R9e39RvDMtt62HFl7GQW8rVlb7exYnV
fV68StMe09JpCWi/dSuKDbVji4KDPK4VKzI9sZeEcHTg0zv0mqJZVpetmEUIg07u
1wcCBLXiaWEpksI2qjE=
=+/wN
-----END PGP SIGNATURE-----
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Cousin Ricky
Subject: Re: Intersection causes quadric to disappear
Date: 27 Jul 2015 18:53:09
Message: <55b6b655@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
On 2015-07-27 02:10 PM (-4), Le_Forgeron wrote:
> Confirmed on Ubuntu 15.04 too.
I have opened task #331 on FlySpray.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Le 28/07/2015 00:53, Cousin Ricky a écrit :
> On 2015-07-27 02:10 PM (-4), Le_Forgeron wrote:
>> Confirmed on Ubuntu 15.04 too.
>
> I have opened task #331 on FlySpray.
>
I have it... you of course had to choose the sole kind of quadric that
get "optimized" bounding box in 3.7 : paraboloid.
(the 3 axes are impacted)
Before (3.6.1):
> if ((A == 0.0) && (D != 0.0) && (E != 0.0) && (H != 0.0) && (J ==
> 0.0)) { /* Get radii for lower x value. */
>
> x = ClipMin[X];
>
> ry1 = sqrt(fabs(2.0 * D * x / E)); rz1 = sqrt(fabs(2.0 * D * x /
> H));
>
> /* Get radii for upper x value. */
>
> x = ClipMax[X];
>
> ry2 = sqrt(fabs(2.0 * D * x / E)); rz2 = sqrt(fabs(2.0 * D * x /
> H));
>
> ry = max(ry1, ry2); rz = max(rz1, rz2);
>
> NewMin[Y] = -ry; NewMin[Z] = -rz; NewMax[Y] = ry; NewMax[Z] = rz;
> }
After (3.7):
> if ((A == 0.0) && (D != 0.0) && (E * H > 0.0) && (J == 0.0)) { /*
> Get radii for lower x value. */
>
> x = D * E < 0 ? max(0., ClipMin[X]) : ClipMin[X];
>
> ry1 = sqrt(fabs(2.0 * D * x / E)); rz1 = sqrt(fabs(2.0 * D * x /
> H));
>
> /* Get radii for upper x value. */
>
> x = D * E > 0 ? min(0., ClipMax[X]) : ClipMax[X];
>
> ry2 = sqrt(fabs(2.0 * D * x / E)); rz2 = sqrt(fabs(2.0 * D * x /
> H));
>
> ry = max(ry1, ry2); rz = max(rz1, rz2);
>
> if (D*E < 0) NewMin[X] = max(0., ClipMin[X]); NewMin[Y] = -ry;
> NewMin[Z] = -rz; if (D*E > 0) NewMax[X] = min(0., ClipMax[X]);
> NewMax[Y] = ry; NewMax[Z] = rz; }
The object has been translated to the origin, the 3.6 version only
reduced the "diameter" of the paraboloid. 3.7 is more ambitious... and
fails with a bounding box that has a null dimension.
When used alone, the paraboloid bounding box is ok in 3.7 (because the
evaluation of radius is above critical length, the bounding box is
reset to infinity, so tracing is fine.
But used in an intersection, the null bounding box is kept, due to the
other objects bounding box being smaller than infinity, and nothing is
traced.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iJwEAQEIAAYFAlW5NhAACgkQhKAm8mTpkW34pgP/ZuSHPbVrmsgbDO4K0xFW+hOi
XYTs4lkYTyNGa6eFQs3TWppbldNavyLtKI6eAjs7u/VrMT9NmsdXzva7Bc7iXx5H
GcvNUyRXVcY1mRLZegksJPxEVMsqFr7uviL728lHBFObnDdYZq2KhnBpqLL3ziJv
OYKtLplqwOQdp36Ph44=
=tCeX
-----END PGP SIGNATURE-----
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Am 29.07.2015 um 22:22 schrieb Le_Forgeron:
> I have it... you of course had to choose the sole kind of quadric that
> get "optimized" bounding box in 3.7 : paraboloid.
> (the 3 axes are impacted)
...
> The object has been translated to the origin, the 3.6 version only
> reduced the "diameter" of the paraboloid. 3.7 is more ambitious... and
> fails with a bounding box that has a null dimension.
>
> When used alone, the paraboloid bounding box is ok in 3.7 (because the
> evaluation of radius is above critical length, the bounding box is
> reset to infinity, so tracing is fine.
>
> But used in an intersection, the null bounding box is kept, due to the
> other objects bounding box being smaller than infinity, and nothing is
> traced.
Not sure I understand exactly what's happening there, but if you do,
that's fine with me :). Are you already working on a fix?
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Am 29.07.2015 um 22:22 schrieb Le_Forgeron:
> I have it... you of course had to choose the sole kind of quadric that
> get "optimized" bounding box in 3.7 : paraboloid.
> (the 3 axes are impacted)
After having had a closer look, it seems that we should be careful when
trying to fix this: The change appears to have in turn been introduced
to fix some other known issue with the quadric bounding boxes.
(For reference: The change dates back to Perforce times, and is listed
in the database as Changelist 3810; it was checked in by Chris on
2005-06-13, apparently on behalf of Massimo Valentini.)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Le 31/07/2015 19:31, clipka a écrit :
> Am 29.07.2015 um 22:22 schrieb Le_Forgeron:
>
>> I have it... you of course had to choose the sole kind of quadric
>> that get "optimized" bounding box in 3.7 : paraboloid. (the 3
>> axes are impacted)
>
> ...
>
>> The object has been translated to the origin, the 3.6 version
>> only reduced the "diameter" of the paraboloid. 3.7 is more
>> ambitious... and fails with a bounding box that has a null
>> dimension.
>>
>> When used alone, the paraboloid bounding box is ok in 3.7
>> (because the evaluation of radius is above critical length, the
>> bounding box is reset to infinity, so tracing is fine.
>>
>> But used in an intersection, the null bounding box is kept, due
>> to the other objects bounding box being smaller than infinity,
>> and nothing is traced.
>
> Not sure I understand exactly what's happening there, but if you
> do, that's fine with me :). Are you already working on a fix?
>
Yes, I'm working on a fix... and understanding the various
transformations of the equation to get a translation and adjusted
coefficients.
Not as obvious as it might seems. Previously I was asserting the
translation was in the wrong direction, but "not always". Seems there
is a few sign errors deep in some branches of code for that translation.
I have some testing scenes (rather kind of animation) with many
quadrics (nobody uses "coefficients translated quadrics", and that
what I need to use to trigger the bug). Once I'm happy with the
solution, I will post it (here and in flyspray)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iJwEAQEIAAYFAlW8wnIACgkQhKAm8mTpkW3acgP+K7F9J4U/ry4eheTzHh7AUSIA
ruRnt95DwTTZ26SovsmCDhl9xaPDfLX/mqUljT7e2Oa5mkwl1tqyui0StXLYhWe8
mfZJtQhfRVGnbkkhvj+0zdc9z7pGWjRAndW+e3xE6CdgQXHKAEfNUvv7F/IcipFu
vNvn1MBROEqfzHS33QE=
=M4KR
-----END PGP SIGNATURE-----
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Le Forgeron
Subject: Re: Intersection causes quadric to disappear
Date: 1 Aug 2015 13:54:09
Message: <55bd07c1@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Le 01/08/2015 02:32, clipka a écrit :
> Am 29.07.2015 um 22:22 schrieb Le_Forgeron:
>
>> I have it... you of course had to choose the sole kind of quadric that
>> get "optimized" bounding box in 3.7 : paraboloid.
>> (the 3 axes are impacted)
>
> After having had a closer look, it seems that we should be careful when
> trying to fix this: The change appears to have in turn been introduced
> to fix some other known issue with the quadric bounding boxes.
>
> (For reference: The change dates back to Perforce times, and is listed
> in the database as Changelist 3810; it was checked in by Chris on
> 2005-06-13, apparently on behalf of Massimo Valentini.)
>
Massimo is quite a competent contributor (he provided the fix for the
bezier curve used in the blob).
The code introduced in 3.7 (compared to 3.6) is ok (for bounding box of
quadrics), and should stay (it make a smaller box for paraboloid, as
such objects are only on one side of the half-universe ).
The problem is deeper, and so simple... it's a double sign error in
unlikely situation (well, in regard to quadrics' space, it's unlikely...
it happens for paraboloid, or rather, when the square terms are already
null on the relevant axis: the computed displacement is then inversed,
and the adjustment of the constant term is also bogus (which is somehow
a good thing, as it is part of the identification of the quadric amongst
a few ones: no identification --> bounding box is kept as large as
possible, so the quadric remains visible)
Nevertheless, I have a few situations where 3.6 (and 3.1g) is also bogus
in regard to the computation of bounding box of quadric in intersection
with something else.
E.g. quadric { <1,0,1>,<0,0,0>,<0,-1,0>,-1/4 } (a paraboloid on y,
upside, translated down by 0.25 ) in a cylinder { 0,y,1 } get a bounding
box of -0.87*2 length on x & z (it should be a length of 2)... but it
get back to normal with a cylinder { -y, y , 1 }... for 3.6. For 3.7 it
just get worst.
The patch is in attached delta.txt
If you are interested in more quadric tests, you can use the attached
scene (with frame & clock from 0 to 63)
On attached images, the green & yellow is the intersection with the blue
and red cylinder at the back.... the bounding box is draw in cyan and
magenta.
Post a reply to this message
Attachments:
Download 'delta.txt' (2 KB)
Download 'inter.pov.txt' (15 KB)
Download 'i36ter_001.png' (143 KB)
Download 'i37ter_001.png' (147 KB)
Download 'ifxter_001.png' (145 KB)
Preview of image 'i36ter_001.png'
![i36ter_001.png](/povray.bugreports/attachment/%3C55bd07c1%40news.povray.org%3E/i36ter_001.png?ttop=442546&toff=100&preview=1)
Preview of image 'i37ter_001.png'
![i37ter_001.png](/povray.bugreports/attachment/%3C55bd07c1%40news.povray.org%3E/i37ter_001.png?ttop=442546&toff=100&preview=1)
Preview of image 'ifxter_001.png'
![ifxter_001.png](/povray.bugreports/attachment/%3C55bd07c1%40news.povray.org%3E/ifxter_001.png?ttop=442546&toff=100&preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |