图形图形处理方面的一位微软专家的主页,
刚在Github上分享了一些不错的代码
http://hhoppe.com/
Hugues Hoppe[pronunciation]
Principal researcher & Manager, Computer Graphics Group of Microsoft Research.
Address: Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399, USA
Email: |
Web: http://hhoppe.com/ Internal: http://msrweb/~hhoppe/ |
New
I recently created a GitHub repository with C++ source code and demos for many of my 1992-1998 SIGGRAPH papers.
See my notes for using math in Microsoft Word, including this cheat sheet.
Demos
Fast computation of seamless video loops.
This tool quickly computes a 5-second looping video from a non-looping input video.Demo (v1.0 2015-10-25; v1.1 2015-11-12) |
|
Automated video looping with progressive dynamism.
Tool to extract a 5-second looping video from a non-looping input video. Also a viewer application to enable both interactive control over the level of dynamism of the output video, as well as manual editing of which regions are animated or static.Demo (v1.0 2013-11-21; v2.0 2014-03-28) |
|
Cliplets: Juxtaposing still and dynamic imagery.
This tool creates cinemagraphs and more general spatiotemporal compositions from ordinary handheld video.project pagedemo |
|
Freeform vector graphics.
Interactive authoring system that builds on thin-plate splines to enable a richer class of vector graphics. The user sketches a variety of curves and points to intuitively control color interpolation within the resulting image. (This demo runs best on a fast multicore CPU.) Demo (v1.0 2011-10-03) |
|
Random-access vector graphics.
Antialiased vector graphics rendered on arbitrary surfaces or under arbitrary deformations. We create a coarse lattice in which each cell contains a variable-length encoding of the graphics primitives that overlap it. These cell-specialized encodings are interpreted at runtime within a pixel shader. Demo (v1.0 2008-06-13; v1.1 2014-09-02 bug fixes) |
|
Rendering of terrains using geometry clipmaps.
Terrain rendering using a set of nested regular grids. The terrain is either incrementally decompressed from a compact in-memory representation or synthesized on the fly as a user navigates within an infinite landscape.Demo (v1.0 2006-03-28) |
Publications
Motion graphs for unstructured textured meshes.
ACM Trans. Graphics (SIGGRAPH), 35(4), 2016.
Automatic smooth transitions between similar meshes in a scanned sequence.
web pagepaper ...
|
|
New controls for combining images in correspondence.
IEEE Trans. Vis. Comput. Graphics, 22(7), 2016. (Presented at I3D 2016.)
Multiscale edge-aware melding of geometry and shape from two images.
web page...
|
|
Fast computation of seamless video loops.
ACM Trans. Graphics (SIGGRAPH Asia), 34(6), 2015.
High-quality looping video generated in nearly real-time.
web pagepaper code...
|
|
High-quality streamable free-viewpoint video.
ACM Trans. Graphics (SIGGRAPH), 34(4), 2015.
Multimodal reconstruction of tracked textured meshes.
web pagepaper project page ...
|
|
Semi-automated video morphing.
Eurographics Symposium on Rendering, 2014.
Transition across two videos using optimized spatiotemporal alignment.
web pagepaper code ...
|
|
Automating image morphing using structural similarity on a halfway domain.
ACM Trans. Graphics, 33(5), 2014. (Presented at SIGGRAPH 2014.)
Fast optimization to align intricate shapes using little interactive guidance.
web pagepaper full codecorrespondence code...
|
|
A fresh look at generalized sampling.
Foundations and Trends in Computer Graphics and Vision, 8(1), 2014.
Extension of recent signal-processing techniques to graphics filtering.
web pagepaper sample code ...
|
|
Automated video looping with progressive dynamism.
ACM Trans. Graphics (SIGGRAPH), 32(4), 2013.
Representation for seamlessly looping video with controllable level of dynamism.
web pagepaper code...
|
|
Screened Poisson surface reconstruction.
ACM Trans. Graphics, 32(3), 2013. (Presented at SIGGRAPH 2013.)
Improved geometric fidelity and linear-complexity adaptive hierarchical solver.
web pagepaper code ...
|
|
Cliplets: Juxtaposing still and dynamic imagery.
Symposium on User Interface Software and Technology (UIST) 2012. (Best Paper Award)
Cinemagraphs and more general spatiotemporal compositions from handheld video.
web pagepaper ...
|
|
A subdivision-based representation for vector image editing.
IEEE Trans. Vis. Comput. Graphics, 18(11), Nov. 2012. (Presented at I3D 2013.)
(Spotlight Paper)
Piecewise-smooth subdivision for representing and manipulating images.
web pagepaper ...
|
|
Freeform vector graphics with controlled thin-plate splines.
ACM Trans. Graphics (SIGGRAPH Asia), 30(6), 2011.
Rich set of curve and point controls for intuitive and expressive color interpolation.
web pagepaper ...
|
|
GPU-efficient recursive filtering and summed-area tables.
ACM Trans. Graphics (SIGGRAPH Asia), 30(6), 2011.
Efficient overlapped computation of successive recursive filters on 2D images.
web pagepaper project pagecode ...
|
|
Image-space bidirectional scene reprojection.
ACM Trans. Graphics (SIGGRAPH Asia), 30(6), 2011.
Real-time temporal upsampling through image-based reprojection of adjacent frames.
web pagepaper ...
|
|
Real-time classification of dance gestures from skeleton animation.
Symposium on Computer Animation 2011. (Honorable Mention)
Recognition of Kinect motions using robust, low-dimensional feature vectors.
web pagepaper ...
|
|
Antialiasing recovery.
ACM Trans. Graphics, 30(3), 2011. (Presented at SIGGRAPH 2011.)
Fast removal of jaggies introduced by many nonlinear image processing operations.
web pagepaper original DX10 source codeMSDN sample code (DX11 Imaging Effects) ...
|
|
Optimizing continuity in multiscale imagery.
ACM Trans. Graphics (SIGGRAPH Asia), 29(6), 2010.
Visually continuous mipmap pyramid spanning differing coarse- and fine-scale images.
web pagepaper ...
|
|
Metric-aware processing of spherical imagery.
ACM Trans. Graphics (SIGGRAPH Asia), 29(6), 2010.
Adaptively discretized equirectangular map for accurate spherical processing.
web pagepaper code and data ...
|
|
Seamless montage for texturing models.
Computer Graphics Forum (Eurographics), 29(2), 479-486, 2010.
Optimized alignment and merging of photographs for texturing approximate geometry.
web pagepaper ...
|
|
Distributed gradient-domain processing of planar and spherical images.
ACM Trans. Graphics, 29(2), 14, 2010. (Presented at SIGGRAPH 2010.)
Spherical gradient-domain processing on a Terapixel sky.
web pagepaper code and data ...
|
|
Amortized supersampling.
ACM Trans. Graphics (SIGGRAPH Asia), 28(5), 2009.
Adaptive reuse of pixels from previous frames for high-quality antialiasing.
web pagepaper ...
|
|
Parallel Poisson surface reconstruction.
International Symposium on Visual Computing 2009.
Parallelization of Poisson reconstruction using domain decomposition.
web pagepaper ...
|
|
Parallel view-dependent level-of-detail control.
IEEE Trans. Vis. Comput. Graphics, 16(5), 2010.
Extended journal version with applications.
web pagepaper ...
|
|
Parallel view-dependent refinement of progressive meshes.
Symposium on Interactive 3D Graphics and Games 2009, 169-176.
Selective refinement of irregular mesh hierarchy using GPU streaming passes.
web pagepaper ...
|
|
Efficient traversal of mesh edges using adjacency primitives.
ACM Trans. Graphics (SIGGRAPH Asia), 27(5), 2008.
Fast rendering of shadow volumes, silhouettes, and motion blur.
web pagepaper ...
|
|
Random-access rendering of general vector graphics.
ACM Trans. Graphics (SIGGRAPH Asia), 27(5), 2008.
GPU rendering of vector art over surfaces using cell-specialized descriptions.
web pagepaper ...
|
|
Factoring repeated content within and among images.
ACM Trans. Graphics (SIGGRAPH), 27(3), 2008.
Megatexture encoded by indirecting into an optimized epitome image.
web pagepaper ...
|
|
Streaming multigrid for gradient-domain operations on large images.
ACM Trans. Graphics (SIGGRAPH), 27(3), 2008.
Perform k multigrid V-cycles in just k-1 streaming passes over the data.
web pagepaper source code and examples ...
|
|
Multi-view stereo for community photo collections.
IEEE International Conference on Computer Vision (ICCV) 2007.
Detailed 3D models reconstructed from crawled Internet images.
web pagepaper project page ...
|
|
Design of tangent vector fields.
ACM Trans. Graphics (SIGGRAPH), 26(3), 2007.
Interactive control of direction fields for real-time surface texture synthesis.
web pagepaper ...
|
|
Compressed random-access trees for spatially coherent data.
Symposium on Rendering 2007.
Efficient representation of coherent image data such as lightmaps and alpha mattes.
web pagepaper ...
|
|
Unconstrained isosurface extraction on arbitrary octrees.
Symposium on Geometry Processing 2007.
Highly adaptable watertight surface from an unconstrained octree.
web pagepaper code ...
|
|
Multi-level streaming for out-of-core surface reconstruction.
Symposium on Geometry Processing 2007.
Out-of-core solution of huge Poisson system to reconstruct 3D scans.
web pagepaper code ...
|
|
Poisson surface reconstruction.
Symposium on Geometry Processing 2006, 61-70.
Reconstruction that considers all points at once for resilience to data noise.
web pagepaper award-winning code ...
|
|
Perfect spatial hashing.
ACM Trans. Graphics (SIGGRAPH), 25(3), 2006.
Sparse spatial data packed into a dense table using a simple collision-free map.
web pagepaper ...
|
|
Appearance-space texture synthesis.
ACM Trans. Graphics (SIGGRAPH), 25(3), 2006.
Improved synthesis quality and efficiency by pre-transforming the exemplar.
web pagepaper ...
|
|
Parallel controllable texture synthesis.
ACM Trans. Graphics (SIGGRAPH), 24(3), 2005.
Parallel synthesis of infinite deterministic content, with intuitive user controls.
web pagepaper ...
|
|
Fast exact and approximate geodesics on meshes.
ACM Trans. Graphics (SIGGRAPH), 24(3), 2005.
Efficient computation of shortest paths and distances on triangle meshes.
web pagepaper Kirsanov's code (slower implementation than Surazhsky's in paper) ...
|
|
Terrain rendering using GPU-based geometry clipmaps.
GPU Gems 2, M. Pharr and R. Fernando, eds., Addison-Wesley, March 2005.
Real-time terrain rendering with all data processing on the GPU.
web pagepaper ...
|
|
Geometry clipmaps: Terrain rendering using nested regular grids.
ACM Trans. Graphics (SIGGRAPH), 23(3), 2004.
New terrain data structure enabling real-time decompression and synthesis.
web pagepaper ...
|
|
Digital photography with flash and no-flash image pairs.
ACM Trans. Graphics (SIGGRAPH), 23(3), 2004.
Combining detail of a flash image with ambient lighting of a non-flash image.
web pagepaper ...
|
|
Inter-surface mapping.
ACM Trans. Graphics (SIGGRAPH), 23(3), 2004.
Automatic creation of low-distortion parametrizations between meshes.
web pagepaper ...
|
|
Removing excess topology from isosurfaces.
ACM Trans. Graphics, 23(2), April 2004, 190-208.
Repair of tiny topological handles in scanned surface models.
web pagepaper ...
|
|
Signal-specialized parameterization for piecewise linear reconstruction.
Symposium on Geometry Processing 2004, 57-66.
Optimizing texture coordinates based on nonlinearity of texture content.
web pagepaper ...
|
|
Consistent spherical parameterization.
Computer Graphics and Geometric Modeling (CGGM) 2005 Workshop.
Low-distortion mapping between genus-zero shapes.
web pagepaper ...
|
|
Shape compression using spherical geometry images.
MINGLE 2003 Workshop. In Advances in Multiresolution for Geometric Modelling, N. Dodgson, M. Floater, M. Sabin (eds.), Springer-Verlag, 27-46.
Concise shape description exploiting 2D image compression techniques.
web pagepaper ...
|
|
Smooth geometry images.
Symposium on Geometry Processing 2003, 138-145.
Subdivision and displacement of genus-zero mesh realized as GPU image processing.
web pagepaper ...
|
|
Spherical parametrization and remeshing.
ACM Trans. Graphics (SIGGRAPH), 22(3), 2003.
Robust mapping of a surface onto a sphere, allowing 2D-grid resampling.
web pagepaper ...
|
|
Multi-chart geometry images.
Symposium on Geometry Processing 2003, 146-155.
Surface shape represented using an atlas of charts within a regular grid.
web pagepaper ...
|
|
Geometry videos: A new representation for 3D animations.
Symposium on Computer Animation 2003, 136-146.
3D animated shape represented as a geometry-image volume.
web pagepaper ...
|
|
Geometry images.
ACM Trans. Graphics (SIGGRAPH), 21(3), 2002.
Connectivity-free resampling of an arbitrary shape into a regular 2D grid.
web pagepaper ...
|
|
Signal-specialized parametrization.
Eurographics Workshop on Rendering 2002, 87-100.
Optimization of texture coordinates for accurate representation of given content.
web pagepaper ...
|
|
Texture mapping progressive meshes.
ACM SIGGRAPH 2001 Proceedings, 409-416.
Texture atlas compatible across levels of detail, and parameterization stretch.
web pagepaper ...
|
|
Fine tone control in hardware hatching.
Symposium on Non-Photorealistic Animation and Rendering (NPAR) 2002, 53-58.
Crisper rendering of illumination-modulated ink strokes.
web pagepaper ...
|
|
Real-time hatching.
ACM SIGGRAPH 2001 Proceedings, 581-586.
Fast nonphotorealistic rendering using precomputed tonal art maps.
web pagepaper ...
|
|
Real-time fur over arbitrary surfaces.
Symposium on Interactive 3D Graphics 2001, 227-232.
Rendering of shells and fins over general meshes.
web pagepaper ...
|
|
Lapped textures.
ACM SIGGRAPH 2000 Proceedings, 465-470.
Texture synthesis over arbitrary surfaces.
web pagepaper ...
|
|
Displaced subdivision surfaces.
ACM SIGGRAPH 2000 Proceedings, 85-94.
Automatic conversion of detailed mesh to displaced surface, and its benefits.
web pagepaper ...
|
|
Discontinuity edge overdraw.
Symposium on Interactive 3D Graphics 2001, 167-174.
Antialiased edges rendered along silhouettes to remove spatiotemporal jaggies.
web pagepaper ...
|
|
Silhouette clipping.
ACM SIGGRAPH 2000 Proceedings, 327-334.
Efficient computation of mesh silhouette, used to clip coarse geometry.
web pagepaper ...
|
|
Silhouette mapping.
Technical Report TR-1-99, Dept. of Computer Science, Harvard University, March 1999.
Interpolation among a sparse set of precomputed object silhouettes.
web pagepaper ...
|
|
Efficient minimization of new quadric metric for simplifying meshes with appearance attributes.
Microsoft Research Technical Report MSR-TR-2000-64, June 2000.
Fast solution of quadric metric exploiting its sub-block structure.
web pagepaper ...
|
|
New quadric metric for simplifying meshes with appearance attributes.
IEEE Visualization 1999 Conference, 59-66.
Efficient simplification metric designed around correspondence in 3D space.
web pagepaper ...
|
|
Optimization of mesh locality for transparent vertex caching.
ACM SIGGRAPH 1999 Proceedings, 269-276.
Face reordering for efficient GPU vertex cache, advocating a FIFO policy.
web pagepaper ...
|
|
Robust mesh watermarking.
ACM SIGGRAPH 1999 Proceedings, 69-76.
Imperceptible low-frequency shape perturbations resilient to remeshing.
web pagepaper project page ...
|
|
View-based rendering: Visualizing real objects from scanned range and color data.
Eurographics Workshop on Rendering 1997, 23-34.
Blending of textured depth meshes using soft z-buffering.
web pagepaper ...
|
|
Robust meshes from multiple range maps.
Intnl. Conf. on Recent Advances in 3-D Digital Imaging and Modeling, May 1997.
Robust surface reconstruction using interval analysis over volumetric octree.
web pagepaper ...
|
|
Efficient implementation of progressive meshes.
Computers & Graphics, 22(1), 1998, 27-36.
Progressive mesh data structures compatible with GPU vertex buffers.
web pagepaper GitHub ...
|
|
Smooth view-dependent level-of-detail control and its application to terrain rendering.
IEEE Visualization 1998 Conference, 35-42.
Visually smooth adaptation of mesh refinement using cascaded temporal geomorphs.
web pagepaper GitHub ...
|
|
View-dependent refinement of progressive meshes.
ACM SIGGRAPH 1997 Proceedings, 189-198.
Lossless multiresolution structure for incremental local refinement/coarsening.
web pagepaper GitHub ...
|
|
Progressive simplicial complexes.
ACM SIGGRAPH 1997 Proceedings, 217-224.
Progressive encoding of both topology and geometry.
web pagepaper GitHub ...
|
|
Progressive meshes.
ACM SIGGRAPH 1996 Proceedings, 99-108.
Efficient, lossless, continuous-resolution representation of surface triangulations.
web pagepaper GitHub ...
|
|
Automatic reconstruction of B-spline surfaces of arbitrary topological type.
ACM SIGGRAPH 1996 Proceedings, 325-334.
Fully automatic creation of B-spline patch network from 3D point cloud.
web pagepaper ...
|
|
Multiresolution analysis of arbitrary meshes.
ACM SIGGRAPH 1995 Proceedings, 173-182.
Semi-regular remeshing for wavelet-based representation of surfaces.
web pagepaper ...
|
|
Surface reconstruction from unorganized points (PhD Thesis).
Department of Computer Science and Engineering, University of Washington, June 1994.
Robust surface topology and optimized geometry from scanned 3D points.
web pagepaper GitHub ...
|
|
Piecewise smooth surface reconstruction.
ACM SIGGRAPH 1994 Proceedings, 295-302.
Subdivision surfaces with sharp features, and their automatic creation by data fitting.
web pagepaper GitHub ...
|
|
Mesh optimization.
ACM SIGGRAPH 1993 Proceedings, 19-26.
Traversing the space of triangle meshes to optimize model fidelity and conciseness.
web pagepaper GitHub ...
|
|
Surface reconstruction from unorganized points.
ACM SIGGRAPH 1992 Proceedings, 71-78.
Signed-distance field estimated from a set of unoriented noisy points.
web pagepaper GitHub ...
|
Talks
Automating image/video morphing and looping.
Interactive 3D Graphics and Games 2015.
talk (396MB)
|
|
Looping videos.
Eurographics 2013.
talk (380MB)
|
|
Processing large-scale imagery.
Pacific Graphics 2010.
talk (218MB)
|
|
Exploring new graphics data structures designed for GPU parallelism.
UIUC, March 2009.
talk (272MB)
|
|
Poisson surface reconstruction and its applications.
Symposium on Solid and Physical Modeling 2008.
talk
|
|
Geometry images: Sampling surfaces on regular grids.
Symposium on Geometry Processing 2004.
talk
|
|
Irregular to completely regular meshing in computer graphics.
International Meshing Roundtable 2002.
talk
|
Academic background
- Ph.D. in 1994 from the University of WashingtonDepartment of Computer Science and Engineering.
Thesis: Surface reconstruction from unorganized points (Advisor:Tony DeRose). - B.S. summa cum laude in 1989 from the University of Washington Electrical Engineering Department.
- Salutatorian, 1985 class of Richland High School Bombers. (Yes, that is a mushroom cloud)
Professional service
- Technical papers chair, SIGGRAPH 2011.
- Editor-in-chief, ACM Transactions on Graphics, 2009-2011.
- Associate editor, ACM Transactions on Graphics, 2003-2008.
- Editorial board, Foundations and Trends in Computer Graphics and Vision, 2004-present.
- Founding co-chair, Symposium on Geometry Processing 2003.
- Co-chair, Eurographics 2004.
- SIGGRAPH papers advisory group, 2014-2019.
- Papers advisory board, SIGGRAPH 2010, 2012, 2014.
- Papers advisory board, SIGGRAPH Asia 2011, 2015.
- Papers area coordinator, SIGGRAPH, 2007, 2008.
- Papers sort, SIGGRAPH Asia, 2014.
- Papers committee, SIGGRAPH, 1998, 1999, 2002, 2004, 2005, 2007, 2008, 2010, 2013, 2015.
- Papers committee, SIGGRAPH Asia, 2009, 2010.
- Papers committee, Symposium on Interactive 3D Graphics, 1999.
- Papers committee, Symposium on Interactive 3D Graphics and Games, 2007, 2008, 2009.
- Papers committee, Graphics Interface, 1999.
- Papers committee, IEEE Visualization, 1999, 2002.
- Papers committee, Eurographics, 2000, 2001, 2014, 2015.
- Papers committee, Shape Modeling International, 2004, 2009.
- Papers committee, Symposium on Geometry Processing, 2004, 2005, 2006, 2007, 2008, 2009.
- Papers committee, Pacific Graphics, 2006.
- Papers committee, SIAM Conference on Geometric and Physical Modeling, 2013.
- Organizing committee, SIAM Conference on Geometric Design 1999.
- Papers committee, Symposium on 3D Data Processing, Visualization and Transmission, 2008.
- Technical sketches jury, SIGGRAPH 2000.
Miscellaneous
I received the 2004 ACM SIGGRAPH Computer Graphics Achievement Award (citation) and became anACM Fellow in 2011.
My interests include traveling, bicycling, hiking, trekking, and all good things from Belgium (Gueuze beer,Côte d'Or chocolate,Leonidas pralines, mussels, waffles from Liège, spéculoos cookies).
Here is my official Microsoft picture.
See my notes on using Microsoft Word to write technical papers.
One of my favorite music albums is Branduardi Canta Yeats by Angelo Branduardi (though I don't speak Italian). My favorite comics artist isFrançois Bourgeon (in French).
Mesh Processing Library
Overview
This GitHub package contains a C++ library and several application programs that demonstrate mesh processing technologies published in research papers at ACM SIGGRAPH in 1992–1998:
- surface reconstruction (from unorganized, unoriented points)
- mesh optimization
- subdivision surface fitting
- mesh simplification
- progressive meshes (level-of-detail representation)
- geomorphs (smooth transitions across LOD meshes)
- view-dependent mesh refinement
- smooth terrain LOD
- progressive simplicial complexes
The source code follows modern C++11 style and is designed for cross-platform use.
Version history
2016-04-28 — initial release.
Requirements / dependencies
The source code can be compiled with Microsoft Visual Studio 2015 from the included solution (*.sln
) and project (*.vcxproj
) files, using either the Integrated Development Environment (IDE) or the msbuild
command.
On Unix-based platforms (including Linux, Mac OS, and Cygwin), the code can also be compiled using gcc
and clang
compilers (and Visual Studio cl
compiler) using Makefiles
designed for GNU make
.
Reading/writing of images and videos is enabled using several options. If available, image I/O can use libpng
/libjpeg
or Windows Imaging Component (WIC). Video I/O can use Windows Media Foundation (WMF). Across all platforms, if the command ffmpeg
is present in the PATH
, it is spawned in a piped subprocess for both image and video I/O.
On Mac OS X, it is necessary to install XQuartz
for X11
support and ffmpeg
for image/video I/O.
Code compilation
Compiling using the Microsoft Visual Studio IDE
Open the distrib.sln
file and build the solution (typically using the "ReleaseMD - x64"
build configuration). Executables are placed in the bin
, bin/debug
, bin/Win32
, or bin/Win32/debug
directory, depending on the build configuration (64-bit versus 32-bit, and release versus debug).
Compiling using msbuild
Set the appropriate environment variables and run msbuild
, e.g.:
(Some alternatives are to set platform
to Win32
, or configuration
to DebugMD
, Release
, or Debug
; here MD
stands for multithreaded DLL.) Executables are placed in the same target directory as in the IDE.
Compiling using GNU make
The CONFIG
environment variable determines which make/Makefile_config_*
definition file is loaded. On Windows, CONFIG
can be chosen among {win, w32, cygwin, mingw, mingw32, clang}
, defaulting to win
if undefined. On Unix-derived platforms (including Linux and Mac OS), CONFIG=unix
is the unique and default setting.
For example, to build using the Microsoft cl
compiler (Debug, with 8 parallel processes, placing *.exe
into directory bin/win
):
To build all programs (into either bin/unix
or bin/win
) and run all unit tests:
To build just the main library using the mingw gcc
compiler on Windows:
To build the Filtermesh
program (into bin/clang
) using the clang
compiler on Windows:
To build all programs (into bin/cygwin
) and run all demos using the gcc
compiler under Cygwin:
To clean up all files in all configurations:
Note that additional options such as debug/release, 32-bit/64-bit, and compiler tool paths/parameters are set in the various make/Makefile_*
files. These need to be adjusted depending on the versions and installation paths of the tools. For instance, the line "rel ?= 0"
in make/Makefile_config_win
specifies a debug (non-release) build, and "$(call prepend_PATH,...)"
in make/Makefile_base_vc
sets the compiler directory.
Publications and associated programs/demos
Surface reconstruction from unorganized points.
ACM SIGGRAPH 1992 Proceedings, 71-78.
Signed-distance field estimated from a set of unoriented noisy points.
programs: Recon
demos: create_recon_*.{sh,bat}, view_recon_*.{sh,bat}
|
|
Mesh optimization.
ACM SIGGRAPH 1993 Proceedings, 19-26.
Traversing the space of triangle meshes to optimize model fidelity and conciseness.
programs: Meshfit
demos: create_recon_*, view_recon_*, create_simplified_using_meshopt, view_simplified_using_meshopt
|
|
Piecewise Smooth Surface Reconstruction.
ACM SIGGRAPH 1994 Proceedings, 295-302.
Subdivision surfaces with sharp features, and their automatic creation by data fitting.
programs: Subdivfit
demos: create_recon_cactus, view_recon_cactus
|
|
Progressive meshes.
ACM SIGGRAPH 1996 Proceedings, 99-108.
Efficient, lossless, continuous-resolution representation of surface triangulations.
programs: MeshSimplify, reverselines, Filterprog
demos: create_geomorphs, view_geomorphs
|
|
Efficient implementation of progressive meshes.
Computers & Graphics, 22(1), 1998, 27-36.
Progressive mesh data structures compatible with GPU vertex buffers.
programs: FilterPM, G3dOGL
demos: create_pm_club, view_pm_club, determine_approximation_error
|
|
View-dependent refinement of progressive meshes.
ACM SIGGRAPH 1997 Proceedings, 189-198.
Lossless multiresolution structure for incremental local refinement/coarsening.
programs: FilterPM, G3dOGL
demos: create_sr_office, view_sr_office
|
|
Smooth view-dependent level-of-detail control and its application to terrain rendering.
IEEE Visualization 1998 Conference, 35-42.
Visually smooth adaptation of mesh refinement using cascaded temporal geomorphs.
programs: StitchPM, G3dOGL
demos: create_terrain_hierarchy, view_terrain_hierarchy, create_sr_terrain, view_sr_terrain, view_gcanyon_*
|
|
Progressive simplicial complexes.
ACM SIGGRAPH 1997 Proceedings, 217-224.
Progressive encoding of both topology and geometry.
programs: G3dOGL
demos: view_psc_drumset
|
Demos
After the code is compiled, the demos can be run as follows.
In Windows, create, view, and clean up all the results using the batch
scripts
On Unix-based systems (e.g. Linux, Mac OS, Cygwin), either run the bash
scripts
or alternatively (and faster), invoke make
to create all results in parallel and then view them sequentially:
Note that pressing the Esc key closes any open program window.
Filter programs
All programs recognize the argument --help
(or -?
) to show their many options.
The programs Filterimage
, Filtermesh
, Filtervideo
, FilterPM
, and Filterframe
are all designed to:
- read media from
std::cin
(or from files or procedures specified as initial arguments), - perform operations specified by arguments, and
- write media to
std::cout
(unless-nooutput
is specified).
For example, the command
- reads the specified image,
- rotates it 20 degrees counterclockwise (with the default reflection boundary rule),
- crops its left and right sides by 100 pixels,
- scales it uniformly to a horizontal resolution of 100 pixels using a 6×6 Lanczos filter,
- adds a 20-pixel blue border on all sides,
- creates an undefined (
alpha=0
) rectangular region in the image center, - fills this region using gradient-domain smoothing,
- outputs some statistics on pixel colors (to
std::cerr
), and - writes the result to a file under a different encoding.
As another example, the command
Filtermesh -info -signeddistcontour 60 -genus |
G3dOGL -key DmDe
- reads a progressive mesh stream to construct a mesh with 1000 faces,
- reports statistics on the mesh geometry,
- remeshes the surface as the zero isocontour of its signed-distance function on a 603 grid,
- reports the new mesh genus, and
- shows the result in an interactive viewer using the specified view parameters,
- simulating keypresses Dm to enable flat shading and De to make mesh edges visible.
The command
Filtermesh -angle 35 -silsubdiv -silsubdiv -mark |
G3dOGL -key DmDeDbJ---- -st demos/data/spheretext.s3d
- reads a 2000-face mesh, marks all edges with dihedral angle greater than 35 degrees as sharp,
- applies two steps of adaptive subdivision near these sharp edges, and
- shows the result flat-shaded (Dm), with edges (De), without backface culling (Db), spinning (J) somewhat slowly (----),
- starting from the view parameters stored in the
spheretext.s3d
file.
The command
- reads the video (entirely into memory),
- uniformly scales the two spatial dimensions by a factor 1.5 using the Keys bicubic filter, and
- saves the new video.
The command
VideoViewer demos/data/palmtrees_small.mp4 - -key =an
- reads the video (entirely into memory),
- reports statistics on the color channels,
- trims off 4 frames at the beginning,
- adds repeated copies of the last frames (with length 20% of the video),
- temporally scales the content by a factor of 1.5 and adjusts the framerate accordingly,
- spatially crops a centered rectangle with width 400 pixels and height 240 pixels,
- adjusts the color gamma,
- sets the output bitrate to 10 megabits/sec, and
- shows the result (
-
forstd::cin
) together with the original video in an interactive viewer, - with keypress = to scale the window size by 2, a to loop all (two) videos, and n to initially select the next (second) video.
Surface reconstruction
Recon
This program reads a list of 3D (x, y, z) points assumed to be sampled near some unknown manifold surface, and reconstructs an approximating triangle mesh. For example,
Filtermesh -genus -rmcomp 100 -fillholes 30 -triangulate -genus | tee distcap.recon.m |
G3dOGL -st demos/data/distcap.s3d -key DmDe
- reads the text file of points,
- reconstructs a triangle mesh assuming a maximum sample spacing (δ+ρ in paper) of 2% of the bounding volume,
- reports the genus of this initial mesh,
- removes all connected components with fewer than 100 triangle faces,
- fills and triangulates any hole bounded by 30 or fewer mesh edges,
- reports the genus of the modified mesh,
- saves it to a file, and
- displays it interactively starting from a specified viewpoint, with flat-shaded faces (Dm) and mesh edges (De).
To show the progression of the Marching Cubes algorithm,
Filtera3d -split 30 | G3dOGL -key DCDb -st demos/data/distcap_backside.s3d -terse
- selects the 'c' (cubes) output stream,
- forces a frame refresh every 30 polygon primitive, and
- shows the result without display-list caching (DC) and without backface culling (Db).
To show a similar streaming reconstruction of the surface mesh,
Filtera3d -split 30 | G3dOGL demos/data/distcap.pts -key DCDb -st demos/data/distcap_backside.s3d -terse -input -key _Jo
- selects the default 'm' (mesh) output stream,
- converts the mesh to a stream of polygons, and
- shows the points and streamed reconstruction with a slow (_) automatic rotation (J) about the object frame (o).
The same program can also read a list of 2D (y, z) points to reconstruct an approximating curve:
Filtera3d -joinlines | tee curve1.a3d |
G3dOGL demos/data/curve1.pts -input -st demos/data/curve1.s3d
Meshfit
Given an initial mesh and a list of 3D points, this program optimizes both the mesh connectivity and geometry to improve the fit, i.e. minimizing the squared distances from the points to the surface. For example,
tee distcap.opt.m | G3dOGL -st demos/data/distcap.s3d -key DmDe
- reads the previously reconstructed mesh and the original list of points,
- applies an optimized sequence of perturbations to improve both the mesh connectivity and geometry,
- using a specified tradeoff between mesh conciseness and fidelity (crep=1e-4 yields a coarser mesh),
- saves the result to a file, and displays it interactively.
The input points can also be sampled from an existing surface, e.g.:
Meshfit -mfile demos/data/blob5.orig.m -file - -crep 1e-6 -simplify |
G3dOGL -st demos/data/blob5.s3d -key DmDe
To view the real-time fitting optimization,
- writes both the initial mesh and the stream of mesh modifications, and
- displays the changing mesh asynchronously with display-list caching disabled (DC).
Polyfit
This related program performs a similar optimization of a 1D polyline (either open or closed) to fit a set of 2D points. For example,
G3dOGL demos/data/curve1.pts -input -st demos/data/curve1.s3d
- reads the previously reconstructed polyline and the original list of points,
- optimizes vertex positions and simplifies the number of line segments according to some representation cost, and
- displays the result together with the original points.
Subdivfit
In a subdivision surface representation, a coarse base mesh tagged with sharp edges defines a piecewise smooth surface as the limit of a subdivision process. Such a representation both improves geometric fidelity and leads to a more concise description.
Subdivfit -mfile - -file demos/data/distcap.pts -crep 1e-5 -csharp .2e-5 -reconstruct >distcap.sub0.m
- reads the previously optimized mesh and tags all edges with dihedral angle greater than 52 degrees as sharp,
- loads this tagged mesh and the original list of points,
- optimizes the mesh connectivity, geometry, and assignment of sharp edges to fit a subdivision surface to the points,
- with a representation cost of
1e-5
per vertex and.2e-5
per sharp edge, and - saves the resulting optimized base mesh to a file. (The overall process takes a few minutes.)
To view the result,
- reads the base mesh together with a second mesh obtained by applying two iterations of subdivision,
- shows the first mesh (N) with flat-shaded faces and edges (DmDe),
- waits for 5 seconds, and displays the second mesh (N) as a smooth surface without edges.
MeshDistance
This program computes measures of differences between two meshes. It samples a dense set of points from a first mesh and computes the projections of each point onto the closest point on a second mesh.
MeshDistance
loads the earlier results of mesh reconstruction and mesh optimization,- computes correspondences from points sampled on each mesh to the other mesh (in both directions), and
- reports differences in geometric distance, color, and surface normals, using both L2 (rms) and L∞ (max) norms.
Mesh simplification
Given a mesh, MeshSimplify
applies a sequence of edge collapse operations to simplify it to a coarse base mesh while trying to best preserve the appearance of the original model. It supports many different simplification criteria, as well as face properties, edges tagged as sharp, and vertex and corner attributes (nx,ny,nz normals, r,g,b colors, and u,v texture coordinates).
For example,
- reads the original mesh and randomly samples points over its surface,
- progressively simplifies it by examining point residual distances, while recording changes to a
*.prog
file, and - writes the resulting base mesh.
The next step is to reverse the sequence of stored edge collapses, i.e. forming a progressive sequence of vertex splits:
We construct a concise progressive mesh by encoding the base mesh together with the sequence of vertex splits that exactly recover the original mesh:
The complete process from the original mesh to the progressive mesh is implemented by the script call
Given a progressive mesh, we can interactively traverse its continuous levels of detail:
- by dragging the left vertical slider using the left or right mouse button, and
- toggling mesh edges using the De key sequence.
We can also define geomorphs between discrete levels of detail, e.g.
G3dOGL -st demos/data/club.s3d -key SPDeN -lightambient .5 -thickboundary 1 -video 101 - | VideoViewer - -key m
- creates a geomorph between 2000 and 3300 faces, another between 3300 and 5000 faces, and similarly one more,
- shows these in a viewer with the level-of-detail slider enabled (S),
- selects all three geomorph meshes (P), enables mesh edges (De), selects the first mesh (N),
- records a video of 101 frames while moving the LOD slider, and
- shows the resulting video with mirror looping enabled (m).
This example displays a progressive mesh after truncating all detail below 300 faces and above 10000 faces:
G3dOGL -pm_mode - -st demos/data/standingblob.s3d
As an example of simplifying meshes with appearance attributes,
MeshSimplify - -nfaces 4000 -simplify |
G3dOGL -st demos/data/imageup.s3d -key De -lightambient 1 -lightsource 0
- forms a planar grid mesh whose 200×200 vertices have colors sampled from a downsampled image,
- simplifies the mesh to 4000 faces while minimizing color differences,
- shows the result with mesh edges (De) and only ambient lighting.
Selective view-dependent mesh refinement
Within demos/create_sr_office
, the script call
creates a progressive mesh in which the simplified vertices are constrained to lie at their original positions (-vsgeom
). This enables selective refinement, demonstrated by
The mesh is adaptively refined within the view frustum, shown as the inset rectangle (key Do) or in the top view (key Dr). Drag the mouse buttons to rotate, pan, and dolly the object.
Terrain level-of-detail control
Within demos/create_sr_terrain.
{sh,bat},
Filtermesh -assign_normals >gcanyon_sq200.orig.m
- converts an elevation image to a smoothed terrain grid mesh, and
- simplifies it to create a selectively refinable mesh.
Then, within demos/view_sr_terrain.sh
,
export G3D_REV_AUTO=1; \
G3dOGL $common -geom 800x820+100+10 -key "&O" -key ,o----J |
G3dOGL $common -geom 800x820+920+10 -async -killeof -input -key Dg)
- opens two synchronized side-by-side windows of the same texture mapped terrain,
- in which the first windows shows the temporal pops resulting from instantaneous mesh operations,
- whereas the second window shows the smooth appearance provided by runtime geomorphs (Dg).
For large terrain meshes, we form a hierarchical progressive mesh by partitioning the terrain mesh into tiles, simplifying each tile independently to form a progressive mesh, stitching the progressive meshes together 2-by-2, and recursively simplifying and merging at coarser pyramid levels.
An example is presented in demos/create_terrain_hierarchy
. It makes use of
to assemble each 2-by-2 set of progressive mesh tiles terrain.level0.x{0,1}.y{0,1}.pm
at the finest level.
The script demos/view_gcanyon_interactive
launches an interactive flythrough over a Grand Canyon terrain model, using a progressive mesh precomputed from an original 4096×2048 height field.
Alternatively, demos/view_gcanyon_frames
shows a real-time flythrough using a pre-recorded flight path, whereby keystroke commands embedded within the input stream automatically change viewing modes.
Topology simplification
The program MinCycles
removes topological noise from a mesh by iteratively pinching off the smallest nonseparating cycle of edges until a specified criterion (cycle length, number of cycle edges, number of cycles, or mesh genus) is reached.
For example, within demos/create_topologically_simplified.
{sh,bat},
MinCycles - -fraccyclelength 1.2 -maxcyclelen .10 -closecycles |
G3dOGL -st demos/data/office.s3d -key DeDEJ---- -thickboundary 0 -lightambient .9
- extracts a mesh of 200000 faces from a progressive mesh,
- closes 46 topological handles to reduce the mesh genus from 50 to 4,
- where the final remaining handle would require a nonseparating cycle of length greater than
.10
- speeding up the process by identifying approximately shortest nonseparating cycles within a factor 1.2 of optimal, and
- shows the resulting closed edge cycles (tagged as sharp) in blue.
Geometry viewer
The G3dOGL
program shows interactive rasterized renderings of 3D (and 2D) geometry, represented as
- streams of polygons/polylines/points (
*.a3d
format), - triangle meshes including geomorphs (
*.m
), - progressive meshes (
*.pm
), - encoded selectively refinable meshes (
*.srm
), - progressive simplicial complexes (
*.psc
), or - simple
*.ply
files.
Please see the many examples presented earlier. The viewer can also read *.frame
elements to position the viewer and the objects in world space. Elements of *.a3d
, *.m
, and *.frame
streams can all be interleaved in a single input stream.
The viewer can take image snapshots (see demos/create_rendered_mechpart_image
) and record videos (see demos/create_rendered_mechpart_video
).
The mouse/keyboard UI controls include:
Mouse movements:left mouse: rotatemiddle mouse: panright mouse: dollyshift-left: panshift-middle mouse: rollshift-right mouse: zoom(mouse movements are with respect to current object; see '0-9' below)Important key strokes:? : print complete list of keysD?: print list of keys prefixed by 'D'De: toggle edgesDs: toggle shading of facesDb: toggle backface cullingDm: toggle Gouraud/flat shadingDP: save current window as an image fileDS: toggle show some slidersS : toggle show some other slidersj : jump to a default viewpointJ : automatically rotate objectD/: edit viewpoint filename, : read the viewpoint. : save the viewpoint0-9: select object (0=eye_frame, 1=first object, 2=second object...)u : display/hide current objectN : select next objectP : select previous object-=: decrease/increase the magnitude of all movementsf : toggle flying (usually with '0' eye selected)
To record a 6-second (360-frame) video of a rotating mesh and then view the resulting video:
The related program G3dVec
shows wireframe hidden-line-removed renderings of *.a3d
streams and *.m
meshes. It can write vector-based Postscript figures (see demos/view_hidden_line_removed
).
In both programs, the keys ? and D? show a list of available keyboard commands.
Image/video viewer
The VideoViewer
program enables interactive viewing and simple editing of both images and videos. Again, the key ? shows a list of available keyboard commands. Press pageup/pagedown to quickly browse through the videos and/or images in a directory. Audio is not currently supported.
File formats
Mesh (*.m
)
See the documentation at the end of libHh/GMesh.h
A mesh is a set of vertices and faces. These in turn also define edges and corners. Arbitrary string tuples can be associated with vertices, faces, edges, and corners. Examples of string tuples: {normal=(.1 .2 .3) rgb=(1 1 1) matid=5 material="string"}
. See the several demos/data/*.m
files for examples of the mesh format. Note that the indices of vertices and faces start at 1 instead of 0; in hindsight that was a poor choice.
Geometry stream (*.a3d, *.pts
)
See the documentation at the end of libHh/A3dStream.h
The stream contains polygons, polylines, points, and control codes (like end-of-frame, end-of-input, change-of-object). Unlike in a mesh, these primitives do not share vertices. The stream can be either text or binary.
Frame stream (*.frame, *.s3d
)
See the documentation at the end of libHh/FrameIO.h
This text or binary format encodes a 4×3 affine transformation (plus an object id and a scalar field-of-view zoom). It is used to record default viewing configurations, and sequences of frames for flythroughs. It usually represents the linear transform from object space (or eye space) to world space. The stream can be either text or binary.
Progressive mesh (*.pm
)
This is a binary representation that consists of a coarse base mesh and a sequence of vertex split records.
Edge collapse / vertex split records (*.prog, *.rprog
)
These are temporary text files containing verbose information for a sequence of edge collapse / vertex split records used by MeshSimplify / reverselines / Filterprog to create a progressive mesh.
Libraries
The library libHh
contains the main reusable classes. All files include Hh.h
which sets up a common cross-platform environment.
The libraries libHWin
and libHWX
define different implementations of a simple windowing interface (class HW
), under Win32
and X Windows
, respectively. Both implementations support OpenGL
rendering.
Code details
The include file libHh/RangeOp.h
defines many functions that act on ranges, which are containers or views for which begin()
and end()
are defined. For example, the function call hh::fill(ar, 1.f)
assigns the value 1.f
to all elements in the array named ar
, and the function call hh::mean(matrix)
computes the average value of all entries in the named matrix
.
The debugging macro SHOW(expr)
outputs expr = ...
on std::cerr
and also returns expr
. It also accepts multiple arguments in which case it returns void
. For example, SHOW(min(1, 2), "hello", 3*2)
outputs the line min(1, 2)=1 hello 3*2=6
. Note the special treatment of literal string values.
Unicode strings are stored using UTF-8 encoding into ordinary std::string
variables. The functions hh::widen()
and hh::narrow()
convert to and from the std::wstring
UTF-16 encodings used in Win32
system calls.
All files use end-of-line encodings based on Unix '\n'
LF (rather than DOS '\r\n'
CR+LF). All streams are opened in binary mode. This allows text and binary to coexist in the same file.
License
See the file ./license.txt
.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
图形图形处理方面的一位微软专家的主页,相关推荐
- 云计算360度 微软专家纵论产业变革
云计算360度:微软专家纵论产业变革(云计算全球视野第一书,汇聚云端智慧,突破创新空间) 张亚勤等 编著 ISBN978-7-121-18686-8 2013年1月出版 定价:128.00元 904页 ...
- 云计算360度:微软专家纵论产业变革
云计算360度:微软专家纵论产业变革(云计算全球视野第一书,汇聚云端智慧,突破创新空间) 张亚勤等 编著 ISBN978-7-121-18686-8 2013年1月出版 定价:128.00元 904页 ...
- java布道师_初探第10代Java帝国:11位Java专家道出了他们最喜欢的功能
Java 10发布后.我们第一时间与11位Java专家讨论了一波.顺便深入挖掘了他们在Java 10中最喜欢的功能和对未发布的JDK11版本的一些看法. " Java 10对Java 9来说 ...
- 中关村Win11 32位微软原版ISO V2021.08
中关村Win11 32位微软原版ISO V2021.08以微软官方原版作为母盘对系统进行了全面优化更新,支持一键化智能安装,在操作舒适性和便捷性方面进行了优化设计,流畅稳定,系统进行了全面优化,大大降 ...
- 萝卜家园win11系统32位微软原版镜像v2021.08
萝卜家园win11系统32位微软原版镜像v2021.08是一款具备了稳定.快速和安全稳定特点的Win11系统,采用了全新的智能安装技术,安装完成后能自动激活,支持全面的驱动,可以完美的兼容各种硬件和软 ...
- 20 位行业专家共话选型经验,CSDN「选型智囊团高端研讨会」圆满落幕!
为帮助每位IT管理者与决策者全面的了解企业相关技术.产品与解决方案,扫除技术与产品选型难题.2020年6月3日,CSDN联合20位行业专家组成的选型智囊团,在云服务.BI大数据.协同办公.安全与运维五 ...
- 百位云计算专家齐聚湖畔大学,阿里云MVP全球闭门会聚焦数字化转型
"阿里云MVP是中国互联网的力量,是中国技术变革.经济变革的力量."9月18日,阿里云MVP全球闭门会现场,阿里云总裁胡晓明的话引发了会议现场热烈的掌声. 小桥流水.小亭古乐,阿里 ...
- 十多位IT专家分享他们离不开的实用工具
有一种方式可令你的工作变得简单一些,就是看看其他的IT专家依赖于哪些工具,然后自己试试.Susan Harkins精选出了13位IT专家喜爱的工具清单.这些专家包括了从顾问.程序员到数据库管理员等. ...
- 十多位IT专家分享他们离不开的实用工具 1
日期: 2009年2月4日 作者: Susan Harkins 目录: 10 things 标签: Software, Security, Microsoft SQL Server, Informat ...
最新文章
- win7如何设置某个软件不弹出用户账户控制
- 计算机二级考数组吗,数组-Java语言程序设计重要笔记 计算机二级考试
- 无人机飞控开发平台培训理论课程——MSP430最小系统
- ​【文末有福利】股票跨度——真实世界的算法
- 安卓案例:利用定时器实现逐帧动画
- 【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字
- 亿万富翁夏令营:库克、巴菲特等出席太阳谷峰会
- Servlet 数据库访问
- 数据库性能自动压测-Oracle swingbench篇
- centos 5.6 安装redmine 步骤
- 你猜一个 TCP 连接上面能发多少个 HTTP 请求
- java非阻塞io流_阻塞式和非阻塞io流初认识
- 第2章 信息系统集成及服务管理
- 压紧力变化的平均值matlab,基于MATLAB遗传算法的汽车拉式离合器膜片弹簧结构参数优化设计...
- php upload 上传类,发布一个PHP的文件上传类——Uploader
- 2068个开源的网站模板【免费下载】
- 解决Centos7网络连接的问题
- 华为计算机主板,华为鲲鹏920台式机主板亮相:性能配置都亮眼
- Intel RDT特性详解
- java文件读写之Channel策略