CS779 Project : Hierarchical B-splines


Introduction

For my final project, I implemented A Hierarchical B-Spline Refinment Surface editor, based on the SIGGRAPH '88 paper Hierarchical B-Spline Refinment by David R. Forsey and Richard H. Bartels. Generally with tensor-product surfaces, the gain of finer control over an area is done by multiplying the total number of control vertices. However, Forsey and Bartels introduced a local method to refine surfaces, using overlays, which are hierarchically controlled subdivisions.
The program is written in C and uses OpenGL. The B-spline surfaces are drawn using the gluNurbsSurface function of OpenGL and evenly spaced knot vectors.


  1. Initial Surface

    The program starts with an initial surface of 12x12 control points. The control points is uniformly spaced on a surface plane.

    The surface is rendered with bi-cubic B-spline patches.


  2. Surface Editing

    The surface is altered by selecting control points.

    In the control points mode, the control points are selected by left mouse click, that turns them into red. Then, they can be moved around by dragging the mouse with the middle mouse button pressed.


  3. Surface Refinement

    The surface can be refined locally by adding another patch on top of it. The added patch subdivises more the region.

    In patch mode, we select the option "Select Insertion Points", and then pick two control points, which defined the location where the refined patch as to lie on. The two control points appear green, they need to not be aligned and to be separated by at least 3 points (restriction of the paper), in order that the insertion works. Size patch from 7*7 to 36*36 can be added, when the patch option "Insert New Patch" is selected.

    The new patch can be inserted on top of a deformed, non-flat surface.

    Then, moving control points on this inserted patch affects a smaller region of the surface.

    The underneath surface, i.e. the parent, has to be trimmed.


  4. Hierarchical Refinment

    Multiple refined patches can be added on top of same parents. All the children are trimmed. More overlays on top of each other, then moving the control points affects a smaller area of the surface.

    Note : selectable points to move are in yellow, while the ones that have to stay static in order to preserve continuity between the patches are displayed in blue and are unselectable.


  5. Offset Referencing

    We use a position, offset method, in order to revaluate easily the location of control points. When a surface underneath or closed is modified, the top surface is affected.


  6. Merging Patches

    Consider multiple refined patches on a same parent. If we want to refine a level more on a surface that is made of two distinct patches (the orange and blue ones) that have the same level of refinement (and no child). Then the two patches are deleted and a wider one is added at the place. The user can then reselect the insertion points on this new subdivided patch to gain more control.


  7. Editing Surface Points

    The mouse drags the points of the surface, instead of its control points. Really useful for design, much more inuitive. All the feature available with the control points are maintained with edit points.


  8. Interface Features


  9. Models

    1. The dragon
    2. The porc-epic
    3. The rhinoceros


  10. Future work


Reference


Acknowledgements of help: