mirror of https://github.com/CGAL/cgal
141 lines
3.8 KiB
TeX
141 lines
3.8 KiB
TeX
\documentclass[a4paper,twoside,10pt]{article}
|
|
\usepackage{tutorial}
|
|
\input{tutorial.def}
|
|
|
|
\begin{document}
|
|
|
|
% TITLE
|
|
\date{}
|
|
\title{{\LARGE {\sffamily\bfseries Getting started with CGAL
|
|
Polyhedron}}\\ the example of subdivision surfaces}
|
|
\author{
|
|
\sffamily Pierre Alliez\footnote{GEOMETRICA, INRIA Sophia-Antipolis}
|
|
\and
|
|
\sffamily Andreas Fabri\footnote{GeometryFactory, Sophia-Antipolis}
|
|
\and
|
|
\sffamily Lutz Kettner\footnote{Max-Planck Institut für Informatik, Saarbrücken}
|
|
\and
|
|
\sffamily Le-Jeng Shiue\footnote{SurfLab, University of Florida}
|
|
\and
|
|
\sffamily Radu Ursu\footnote{GEOMETRICA, INRIA Sophia-Antipolis}}
|
|
\maketitle
|
|
|
|
\thispagestyle{empty}
|
|
|
|
% ABSTRACT
|
|
|
|
\abstract{This document gives a rapid description for a user to get
|
|
started with the halfedge data structure provided by the Computational
|
|
Geometry Algorithm Library (CGAL). Assuming the reader to be familiar
|
|
with the C++ template mechanisms and the key concepts of the Standard
|
|
Template Library (STL), we describe three different approaches with
|
|
increasing level of sophistication for implementing mesh subdivision
|
|
schemes. The simplest approach uses simple Euler operators to
|
|
implement the $\sqrt{3}$ subdivision scheme applicable to triangle
|
|
meshes. A second approach overloads the incremental builder already
|
|
provided by CGAL to implement the quad-triangle subdivision scheme
|
|
applicable to polygon meshes. The third approach is more generic and
|
|
offers an efficient way to design its own subdivision scheme through
|
|
the definition of rule template. Catmull-Clark, Loop and Doo-Sabin
|
|
schemes are illustrated using the latter approach. Two companion
|
|
applications, one developed on windows with MS .NET, MFC and OpenGL,
|
|
and the other developed with Qt and OpenGL, implement the subdivision
|
|
schemes listed herein, as well as several functionalities for
|
|
interaction, visualization and raster/vectorial output.}
|
|
|
|
\vskip 3mm
|
|
|
|
\noindent {\bf Keywords:}
|
|
CGAL library,
|
|
tutorial,
|
|
halfedge data structure,
|
|
polygon surface mesh,
|
|
subdivision surfaces,
|
|
quad-triangle subdivision scheme,
|
|
$\sqrt{3}$,
|
|
Loop,
|
|
Doo-Sabin,
|
|
Catmull-Clark,
|
|
OpenGL.
|
|
|
|
% INTRODUCTION
|
|
\section{Introduction}
|
|
|
|
Motivations:
|
|
|
|
\begin{itemize}
|
|
\item stop reinventing the wheel
|
|
\item the use of an optimized and robust computational
|
|
geometry library guarantees a much easier implementation, as
|
|
well as fast and robust results
|
|
\item feel the power of generic programming
|
|
\end{itemize}
|
|
|
|
% PREREQUISITES
|
|
\section{Prerequisites}
|
|
|
|
C++ and generic programming
|
|
STL
|
|
Concepts of iterators and circulators in general.
|
|
|
|
% HALFEDGE DATA STRUCTURE
|
|
\section{Halfedge data structure}
|
|
|
|
Description.
|
|
|
|
Why it is so convenient (circulation around vertices, inside facets,
|
|
along a boundary, etc).
|
|
|
|
Euler operators.
|
|
|
|
% STL CONCEPTS APPLIED TO MESHES
|
|
\section{STL concepts applied to meshes}
|
|
|
|
Concepts of iterators and circulators in general on a mesh.
|
|
|
|
% POLYHEDRON DATA STRUCTURE
|
|
\section{Polyhedron data structure}
|
|
|
|
% SUBDIVISION SURFACES
|
|
\section{Subdivision surfaces}
|
|
|
|
A nice example to illustrate (i) iteration and circulation on a
|
|
halfedge data structure, (ii) modification of the connectivity, and
|
|
iii) modification of the geometry.
|
|
|
|
\subsection{Concept}
|
|
|
|
A subdivision surface is the limit surface of a subdivision process
|
|
applied over a control mesh...etc.
|
|
|
|
\subsection{Using Euler operators}
|
|
|
|
$\sqrt{3}$
|
|
|
|
\subsection{Using incremental builder}
|
|
|
|
quad-triangle
|
|
|
|
\subsection{Using a rule template}
|
|
|
|
Doo-Sabin, Catmull-Clark, Loop.
|
|
|
|
% APPLICATION DEMO
|
|
\section{Application demo}
|
|
|
|
List of features, snapshots.
|
|
|
|
\subsection{Compiling on Windows}
|
|
|
|
\subsection{Compiling on Linux}
|
|
|
|
% CONCLUSION
|
|
\section{Conclusion}
|
|
|
|
% REFERENCES
|
|
\bibliographystyle{alpha}
|
|
\bibliography{tutorial}
|
|
|
|
|
|
\end{document}
|