|
![](/i/fill.gif) |
On Sat, 29 Jun 2002 23:34:06 -0400, Jim Kress wrote:
>> that comes to mind is: Shoot a ray from the surface of the triangle to one
>> side of it (it doesn't really matter which direction), and if hits an even
>> amount of other triangles (also 0 is even), that side is is outside, else
>> it's inside.
>
> Got any suggestions how I would do this? I've looked through the Internet
> and have not been able to find an algorithum (or code) that would show me
> how this is done.
There's an easier way. Find the vertex V that is closest to an arbitrary
faraway point P ("faraway" is ill-defined here, but 100x the size of the
bounding box away from any point of the bounding box is probably far enough.)
Now, find a triangles that abuts the vertex V and is closer to P than the
other triangles that abut V (put all the other vertices W0..Wn of all the
other triangles in a pile, pick the closest one of those and call it W. Now,
you've narrowed it down to two triangles. Whichever of those has the closest
third vertex is your triangle.) If the dot-product of that triangle's normal
with the vector P-V is positive, it's oriented correctly and you can use it
to fix the orientation of the rest of the triangles as Warp described.
Otherwise, it's oriented incorrectly and you just need to flip it.
This definitely works in 2d with line segments instead of triangles; I haven't
checked it in 3d.
--
#local R=<7084844682857967,0787982,826975826580>;#macro L(P)concat(#while(P)chr(
mod(P,100)),#local P=P/100;#end"")#end background{rgb 1}text{ttf L(R.x)L(R.y)0,0
translate<-.8,0,-1>}text{ttf L(R.x)L(R.z)0,0translate<-1.6,-.75,-1>}sphere{z/9e3
4/26/2001finish{reflection 1}}//ron.parker@povray.org My opinions, nobody else's
Post a reply to this message
|
![](/i/fill.gif) |