hello scott,
here are my thoughts on decomposing geometry:
>> I have seen a few pieces of code out there that can take a Geometry Array
and
>> create the same Geometry Array only with fewer vertices.
what you mean is commonly named "mesh reduction". but there is something
more powerful: NURBS tesselation!
>> So, if a NURB object had say, 5000 vertices.
>> this package would make the same NURB object, but only use 3000 vertices.
>> making the object simpler, getting rid of redundant vertices, things like
that.
let me correct you: the singular is "NURBS" (non-uniform rational b-spline),
not "NURB".
yes i agree, the trailing 'S' is rather misleading.
another thing I have to correct: in its natural "parametric" form, a NURBS
object is usually not comprised of 5000 vertices. I think an average,
not-too-complex NURBS object has perhaps between 30 and 300 vertices (plus
another few hundred control points). However, because "welded planes" are
spanned between the corners, a 30 corner NURBS objects can still bear a lot
of detail - highest detail if you wish. in order to approximate a polygon
mesh to the NURBS object you would probably require a few thousand vertices
for good resolution, that's true.
NURBS is a very powerful kind of 3d model representation and ideally suited
for dynamic LOD, because it makes "decomposing" unnecessary: you just need
to retesselate parametric NURBS objects given different tesselation
thresholds, which produces polygon meshes with corresponding resolutions
(=number of vertices).
when you have a NURBS object in parametric form, the fine thing is that you
can tesselate it to your preferred resolution, without introducing artifacts
like some mesh reduction algorithms do.
tesselating a NURBS object to, say 5000 vertices and then mesh-reducing it
later to 3000 vertices would be possible, but you get higher quality by
instead retesselating the original parametric NURBS object, this time
specifying a lower precision.
"tesselation" refers to breaking up the welded plane spanned up by a number
of bezier curves and is, as far as i know, a very simple, fast and
straightforward process. basically, you only have to evaluate the NURBS
function given some "x" and "y" parameter for obtaining the vertices.
(correct me if i'm wrong.)
what i think is really cool is to have your model files contain NURBS in
parametric form and when loading them, the system decides how precisely to
tesselate them into polygons based on the system speed. in this case you
could also specify something like "GENERATE_LOD" when loading, and the
system would create a number of LOD geometries simply by specifying
different tesselation thresholds (again, depending on the system
performance).
this means, the super-power-user with his 999 THz 128x pipeline accelerator
card can enjoy a perfectly rounded model, while a TNT1 owner still sees an
adequate approximation with 200
vertices or so - and all this would happen automagically for any NURBS model
imported.
all you need to implement this "vision" is a NURBS tesselator (which is
available in source-code on the net, if not java then c source code), a 3d
file format that supports parametric NURBS (also available), and a cool
operator who can create good parametric NURBS models.
i can find out the URL of the NURBS tesselator C source code if you need it.
>> Has anyone gotten something like this working for the Java3d geometry
classes?
me not, but i suspect java is a little too slow for realtime mesh-reduction
or realtime tesselation. static (pre-calculated) mesh-reduction should
however be no problem, i already saw a number of (non-java, put adaptable)
algorithms on the net. again, i may point to the excellent Graphics Gems,
not sure but it should contain code on that matter. find the url in my
previous postings.
there are also ready-made products that enable you to load an object and
reduce it to a given number of polygons, then save it in a number of
formats - if this is what you need.
i'm much of interested in your proceedings, please keep us up-to-date.
-- julian
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".