![](/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) |
Taking a break from Lego, I thought of a nice efficient method of placing
objects relatively evenly over the surface of another object. This only took
about 10-15 seconds to parse, and a good deal of that was building the rock
mesh...
I haven't tested it thoroughly yet, but I think it should work on everything -
csg, meshes, open meshes, patches, the lot.
:)
Post a reply to this message
Attachments:
Download 'utah10000bc.jpg' (98 KB)
Preview of image 'utah10000bc.jpg'
![utah10000bc.jpg](/povray.binaries.images/attachment/%3Cweb.498a2d248d7f70a2219167190%40news.povray.org%3E/utah10000bc.jpg?ttop=443866&toff=2850&preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
"Bill Pragnell" <bil### [at] hotmail com> wrote:
> Taking a break from Lego, I thought of a nice efficient method of placing
> objects relatively evenly over the surface of another object. This only took
> about 10-15 seconds to parse, and a good deal of that was building the rock
> mesh...
What a great trick! It sure beats a 'random' tracing operation, especially on
the inside of the handle. *That's* magical. If you feel so inclined...PLEASE
post the details. I can think of many uses for it, even revamping some of my
old scenes.
Ken W.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Paolo Gibellini
Subject: Re: the Utah teapot is older than you think!
Date: 5 Feb 2009 04:41:22
Message: <498ab442@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Very nice!
How did you treat the placing of the objects inner the cavities?
;-)
Paolo
>Bill Pragnell on date 05/02/2009 01:04 wrote:
> Taking a break from Lego, I thought of a nice efficient method of placing
> objects relatively evenly over the surface of another object. This only took
> about 10-15 seconds to parse, and a good deal of that was building the rock
> mesh...
>
> I haven't tested it thoroughly yet, but I think it should work on everything -
> csg, meshes, open meshes, patches, the lot.
>
> :)
>
>
> ------------------------------------------------------------------------
>
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) |
"Bill Pragnell" <bil### [at] hotmail com> wrote:
> Taking a break from Lego, I thought of a nice efficient method of placing
> objects relatively evenly over the surface of another object. This only took
> about 10-15 seconds to parse, and a good deal of that was building the rock
> mesh...
>
> I haven't tested it thoroughly yet, but I think it should work on everything -
> csg, meshes, open meshes, patches, the lot.
>
> :)
Really interesting!
--
Carlo
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) |
"Kenneth" <kdw### [at] earthlink net> wrote:
> "Bill Pragnell" <bil### [at] hotmail com> wrote:
> > Taking a break from Lego, I thought of a nice efficient method of placing
> > objects relatively evenly over the surface of another object. This only took
> > about 10-15 seconds to parse, and a good deal of that was building the rock
> > mesh...
>
> What a great trick! It sure beats a 'random' tracing operation, especially on
> the inside of the handle. *That's* magical. If you feel so inclined...PLEASE
> post the details. I can think of many uses for it, even revamping some of my
> old scenes.
I will eventually, I only threw it together the other night so I want to make
sure it works properly, and maybe improve its performance and options a little.
It's basically just a macro that loops over voxels in the target object's
bounding box, testing each one for proximity to a surface by firing a few rays
around. If it finds a surface close by, it puts a component object there.
Simple. Of course, halving the size of the resolution parameter causes an
eightfold rise in parsing time, but it's still tolerable even at very high
resolutions.
Naturally, there's no direction bias, so it finds all surfaces, even interior
ones and open ones (my original idea was to test for inside() first, but it's
not necessary to make it work).
Bill
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) |
"Bill Pragnell" <bil### [at] hotmail com> wrote:
>
> It's basically just a macro that loops over voxels in the target object's
> bounding box, testing each one for proximity to a surface by firing a few rays
> around. If it finds a surface close by, it puts a component object there.
> Simple. Of course, halving the size of the resolution parameter causes an
> eightfold rise in parsing time, but it's still tolerable even at very high
> resolutions.
'Voxels', as in, all the points (the 'resolution') that are linearly
stepped-though in the bounding box, to cover its total volume? And shooting a
few trace rays from each point? If I have that right, that's cool. (It's cool
in any case, of course!) Or by 'resolution,' do you mean the number of rays
that are traced from each voxel point? I'm getting a good overall mental
picture of the process, and seeing its intrinsic simplicity.
KW
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) |
"Kenneth" <kdw### [at] earthlink net> wrote:
> 'Voxels', as in, all the points (the 'resolution') that are linearly
> stepped-though in the bounding box, to cover its total volume?
Yup, voxels is probably the wrong word, it's just a 3d grid through the bounding
box.
> And shooting a
> few trace rays from each point?
Aye. I fill an array with 6 vectors (currently x, -x, y, -y, z, -z) before
starting, and loop through them for each point visited. If I get a hit within
the step distance from the grid point (or some multiple thereof), I place a
secondary object there.
> Or by 'resolution,' do you mean the number of rays
> that are traced from each voxel point?
I give the macro a step distance to specify the resolution of the grid on each
axis, and just ignore the fact that it probably doesn't divide exactly into the
dimensions of the bounding box.
It's remarkably simple, I'm amazed I never thought of it before. On the other
hand, I don't have a specific use for this at the moment, I'm just larking
around! :-) If there's definite interest I'll post the code at some point...
Bill
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) |
Bill Pragnell wrote:
> Taking a break from Lego, I thought of a nice efficient method of placing
> objects relatively evenly over the surface of another object. This only took
> about 10-15 seconds to parse, and a good deal of that was building the rock
> mesh...
>
> I haven't tested it thoroughly yet, but I think it should work on everything -
> csg, meshes, open meshes, patches, the lot.
>
> :)
>
>
> ------------------------------------------------------------------------
>
Oh Baby!
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) |
These images illustrate the distribution of placed objects. The top one randomly
rotates the direction vectors before looking for surfaces, the bottom one just
uses +- x, y, z.
Post a reply to this message
Attachments:
Download 'spiky.jpg' (256 KB)
Preview of image 'spiky.jpg'
![spiky.jpg](/povray.binaries.images/attachment/%3Cweb.498b604b2cee23ee7da89d350%40news.povray.org%3E/spiky.jpg?ttop=443866&toff=2850&preview=1)
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
From: Thomas de Groot
Subject: Re: the Utah teapot is older than you think!
Date: 6 Feb 2009 03:20:57
Message: <498bf2e9@news.povray.org>
|
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
"Bill Pragnell" <bil### [at] hotmail com> schreef in bericht
news:web.498a2d248d7f70a2219167190@news.povray.org...
> Taking a break from Lego, I thought of a nice efficient method of placing
> objects relatively evenly over the surface of another object. This only
> took
> about 10-15 seconds to parse, and a good deal of that was building the
> rock
> mesh...
>
> I haven't tested it thoroughly yet, but I think it should work on
> everything -
> csg, meshes, open meshes, patches, the lot.
>
> :)
>
Nice work!
Interestingly, Tim Attwood posted something similar in povray.advanced-users
on January 22nd, 2007,
http://news.povray.org/povray.advanced-users/thread/%3C45b52eed%241%40news.povray.org%3E/?ttop=299803&toff=100
and which I have used a couple of times. Would be interesting to compare
methods...
Thomas
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) |