Introduction
|
This code illustrates a quadtree implementation of dual quadrilateral
subdivision schemes. It supports primarily Doo-Sabin and a new
Bi-Quartic scheme invented by Zhang, Schröder and Zorin. Other
schemes for dual quadrilateral subdivision can be added simply by
editing the proper filter coefficients. There are currently 3 sets
of such coefficients compiled into the code: Catmull and Clark's
variant of the Doo-Sabin scheme, the Midedge variant of Habib and
Warren and the new Bi-Quartic scheme which is based on a repeated
averaging approach.
The code consists of two tools: mfilter and
dual . mfilter supports the Doo-Sabin and
Bi-Quartic schemes only and performs a single, uniform subdivision
step. Cascading calls to it one can repeatedly subdivide an input
mesh. The dual code supports multiple levels of subdivision
including adaptive subdivision. It also supports the Midedge
scheme. This support comes at the cost of placing further
restrictions on the input (see below).
The main focus in this code was on simplicity so that it may serve as an educational tool for those who want to learn more about subdivision. Consequently we have favored simplicity over completeness in our implementation. For example, there are no feature based subdivision rule modifications included in the code. Boundaries have no special crease rules, etc. Such treatments can all be added, and would be included in a more complete code, but they also make the code harder to read for beginners. We included one special capability: adaptive subdivision. The subdivision part of this is easy, but the code which generates triangulated output for an adaptive dual subdivision is extremely nasty. We included it anyway, since adaptivity is so important in practice. There are a number of properties the input meshes must satisfy:
|
Package Structure
|
The whole package consists of a number of directories and targets. The
targets are
UNIX:
Every sub-project has Makefiles for SGI CC and the gnu
tools. They are named
while g++/gcc uses:
Windows:
Both the Please note that the project will not build under Visual Studio 5.0
|
Invocation
|
% dual <level> <DS|ME|BIQ> [epsilon]
|
Examples
|
Here are a few example invocations to get you started with the sample
models that we included. Note that these examples assume that
dual , mfilter , and the iv input files are
in the current directory. The iv files can be found in the
quad/iv directory.
|
Notes
|
Here are a few notes about the code that go beyond our comments in the
introduction.
Adaptivity When running
What gets written out? The output produced by
|
Acknowledgements
|
The mfilter and dual codes were written
primarily by Jianhui Zhang and Peter Schröder. The code
contains material contributed by Denis Zorin and Wim Sweldens. It
has also benefitted greatly from discussions with Nathan Litke, Igor
Guskov and Andrei Khodakovsky. The package uses qvlib
written by Paul S. Strauss of Silicon Graphics and modified by
Henning Biermann to support more vrml nodes and fileio.
Bug reports regarding |
Copyright © 2000 Peter Schröder |