This is still a work in progress, especially since I've agreed to put a little more time into it to see if I can get it working better, and on more general surfaces. However, here I present the results I have so far.
The following table shows various levels of subdivison on an eight sided shape, as well as the results of applying my "inverse" subdivision once and twice. This is to show that it indeed works as a (one sided, at least) inverse. Note that the second application isn't quite working perfectly. This is due to problems figuring out what "every other" vertex is. There's an easy hack for 4, 6, 8, and all even degree vertices, but I haven't implemented that as yet.
| Level | Result of Subdividing | "Inverting" Once | Applying a Second "Inverse" |
|---|---|---|---|
| Original |
![]() |
![]() | |
| 1 |
![]() |
![]() |
|
| 2 |
![]() |
![]() |
|
| 3 |
![]() |
![]() |
|
| 4 |
![]() |
![]() |
|
| 5 |
![]() |
![]() |
|
| 6 |
![]() |
![]() |
|
"So what?" you say... I can subdivide and invert a simple 8 sided diamond
shape. Can I do anything tougher? Well, yes and no. Below is a head shape
that I found online. The only problem with this shape is that it isn't closed,
and as my code stands it doesn't handle non-closed objects well. Conceptually,
there's nothing stopping me from handling non-closed objects, but it's that
many more bugs to work out :-)
The head subdivided once.
Notice the points sticking out of his head. This is my subdivison algorithm
not handling the edges of the surface correctly. These "points" cause
problems for my inverse.
The head subdivided a second time.
The points are still there!
The head subdivided twice, and "inverted" once.
Note that the pointy "spikes" from the head are what cause
all the triangles with vertices at the origin... Ignoring those,
the inverse works pretty well here too.
Last Modified: Saturday, January 13, 2001
Chris Wyman (wyman@cs.utah.edu)