|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
This may already exist; if so a URL would be welcome! What I'd like to
be able to do is place objects on the surface of another object. The macro
should be able to place an object (b) anywhere on the other object (a),
rotated according (I guess) to the normal of (a) at the point (b) will be
placed. I'm mostly interested in spheres and torii for (a), but ones that
have been scaled in various axis PRIOR to having (b) placed. If the macro
could handle any of POV's primitives, that would be cool too. It would
also be cool to have some control over where (b) is placed on (a); with a
sphere I suppose a vector from the center could be used. No idea how a
torus would handle it... maybe a flag to use the first or second surface
hit?
What I'm thinking of is something like this:
#declare B = [definition of object to be placed on surface of A]
#declare A = [definition of object that will have B placed on it]
#declare loop = 0;
#declare C = union {
#while (loop < 11)
Place(A, B, [vector??], [first or second??], [random])
#declare loop = loop + 1;
#end
}
Is this an impossible dream?? I have looked at MegaPOV's trace function,
but it goes over my head even if I stand up while I read about it. <smile>
If it's possible and an explanation of how to go about doing it were
available I could take a hack at it myself.
--
Rich Allen
(Remove SPAM from my address to reply by e-mail)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Rich <SrP### [at] mindspringcom> wrote:
: This may already exist; if so a URL would be welcome! What I'd like to
: be able to do is place objects on the surface of another object.
Holy cow! That's a pretty difficult thing you are asking for.
Calculating the intersection curve/point of two arbitrary surfaces is
often impossible (at least analytically) and even when possible very hard.
It's easy only for the simplest surfaces (planes, spheres...).
Placing a point on the surface of an object is rather easy with the
trace() function (in megapov), but placing another object is a lot harder.
Placing a sphere may succeed rather well (unless the other surface is very
chaotic), but if you try with any more complicated objects, it may be
near to impossible.
You could try this:
- Trace many rays with trace() from the interior of the object to be placed
towards the other object.
- For each ray, get its intersection point with the first object and the
intersection point with the second object.
- If for all rays the first intersection point is closer to the starting
point than the second point, then the object to be placed is too far. Move
it closer.
- If for any ray the first point is farther than the second point, the
first object intersects the second one. Move it farther away.
- Do this until the smallest difference between the two points is small
enough.
This algorithm is far from fool-proof, but may work in many cases. It's
also slow.
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
trace should do it, it's not even heard to understand, try it.
Rich wrote:
>
> This may already exist; if so a URL would be welcome! What I'd like to
> be able to do is place objects on the surface of another object. The macro
> should be able to place an object (b) anywhere on the other object (a),
> rotated according (I guess) to the normal of (a) at the point (b) will be
> placed. I'm mostly interested in spheres and torii for (a), but ones that
> have been scaled in various axis PRIOR to having (b) placed. If the macro
> could handle any of POV's primitives, that would be cool too. It would
> also be cool to have some control over where (b) is placed on (a); with a
> sphere I suppose a vector from the center could be used. No idea how a
> torus would handle it... maybe a flag to use the first or second surface
> hit?
>
> What I'm thinking of is something like this:
>
> #declare B = [definition of object to be placed on surface of A]
> #declare A = [definition of object that will have B placed on it]
> #declare loop = 0;
> #declare C = union {
> #while (loop < 11)
> Place(A, B, [vector??], [first or second??], [random])
> #declare loop = loop + 1;
> #end
> }
>
> Is this an impossible dream?? I have looked at MegaPOV's trace function,
> but it goes over my head even if I stand up while I read about it. <smile>
> If it's possible and an explanation of how to go about doing it were
> available I could take a hack at it myself.
>
> --
> Rich Allen
> (Remove SPAM from my address to reply by e-mail)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Lewis <nle### [at] netvisionnetil> wrote:
: trace should do it, it's not even heard to understand, try it.
trace() can place a _point_ on the surface, not another object.
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Warp" wrote:
> Lewis wrote:
> : trace should do it, it's not even heard to understand, try it.
>
> trace() can place a _point_ on the surface, not another object.
It can also find the normal, so shouldn't a reorient macro + the translate
keyword do the trick?
Greetings,
Rune
--
Updated July 10: http://rsj.mobilixnet.dk
3D images, include files, stereograms, tutorials,
The POV Desktop Theme, The POV-Ray Logo Contest,
music, 350+ raytracing jokes, and much more!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
In article <8F6C6BC70spammindspringcom@204.213.191.228>,
SrP### [at] mindspringcom (Rich) wrote:
> Is this an impossible dream?? I have looked at MegaPOV's trace
> function, but it goes over my head even if I stand up while I read
> about it. <smile> If it's possible and an explanation of how to
> go about doing it were available I could take a hack at it myself.
The trace() function is not difficult to understand. It just finds the
first intersection point of a line with an object, and optionally the
normal.
An approximation would be quite easy to do, with the trace() function
and the ReOrient() macro. This wouldn't be perfect, and on many
combinations of surfaces would give slightly incorrect results(the
objects intersecting in the area of contact), but should be adequate for
most purposes.
--
Christopher James Huff - Personal e-mail: chr### [at] maccom
TAG(Technical Assistance Group) e-mail: chr### [at] tagpovrayorg
Personal Web page: http://homepage.mac.com/chrishuff/
TAG Web page: http://tag.povray.org/
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Rune <run### [at] inamecom> wrote:
: It can also find the normal, so shouldn't a reorient macro + the translate
: keyword do the trick?
But how can you be sure that the object is not partially inside the surface?
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
chr### [at] maccom (Chris Huff) wrote in <chrishuff-
6D1A7E.18382109072000@news.povray.org>:
>The trace() function is not difficult to understand. It just finds the
>first intersection point of a line with an object, and optionally the
>normal.
>An approximation would be quite easy to do, with the trace() function
>and the ReOrient() macro. This wouldn't be perfect, and on many
>combinations of surfaces would give slightly incorrect results(the
>objects intersecting in the area of contact), but should be adequate for
>most purposes.
Thanks Chris. I've re-read the MegaPOV docs regarding trace and I think
I can get something going now. I guess the only question I have now is how
do I figure out the 'start' vector for arbitrary areas of the object being
traced. I guess I'll just have to go the trial-and-error route, geometry
was far from my favorite class way back when I was in school. <grin> Hmm,
can anyone supply a formula in POV code that will, assuming <0,0,0> as the
base vector, take an angle, rotation around the y axis, and minimum radius,
and return a new vector?
Warp: I understand your concern for matching surfaces, but I'm actually
not worried about that bit. I should have asked for a point on a surface,
sorry. I'm thinking of something like short pipe sections covering parts
of a stretched sphere, that sort of thing, so it won't matter if parts of
the small objects are embedded in the surface of the target object.
Anyway, if I get something figured out I'll post it. Thanks everyone!
--
Rich Allen
(Remove SPAM from my address to reply by e-mail)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Warp" <war### [at] tagpovrayorg> wrote in message news:39691110@news.povray.org...
| Rune <run### [at] inamecom> wrote:
| : It can also find the normal, so shouldn't a reorient macro + the translate
| : keyword do the trick?
|
| But how can you be sure that the object is not partially inside the
surface?
Why not trace both? But of course the surface terrain would have to be
suitable still.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Try vegetate.inc at http://www.geocities.com/rengaw03/PovRay.html
Mark
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|