Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[no-title] #11801

Open
guevara opened this issue Sep 24, 2024 · 0 comments
Open

[no-title] #11801

guevara opened this issue Sep 24, 2024 · 0 comments

Comments

@guevara
Copy link
Owner

guevara commented Sep 24, 2024

[no-title]



https://ift.tt/W9wMC6Y







trimesh trimesh2 is a C++ library and set of utilities for input, output, and basic manipulation of 3D triangle meshes. The goals of the code are ease of use and efficiency, possibly at the expense of some generality.

Features

The library includes the following:

  • Support for reading PLY, OFF, 3DS, and Wavefront OBJ files, together with a few other formats of mostly local interest (SM, RAY).
  • Support for writing PLY, OFF, and OBJ files.
  • Vec: a templated C++ class for constant-length vectors, with support for the usual arithmetic operations (add, subtract, componentwise multiply and divide, dot product, cross product, etc.)
  • XForm: a class for rigid-body transformations.
  • An OpenGL trackball/arcball implementation, with automatic selection of rotation center.
  • Algorithms for subdivision, smoothing, curvature estimation, triangle stripping, and various other simple mesh manipulations.

Bundled together with the library are:

In addition, the following utility programs are included:

  • mesh_view: a simple 3D mesh viewer
  • mesh_make: create arbitrarily-tessellated meshes of various simple shapes
  • mesh_filter: applies a variety of simple transformations to a mesh, such as converting formats, flipping faces, subdivision, smoothing, rigid-body transformations, etc.
  • mesh_cc: list and/or extract connected components from a mesh
  • mesh_cat: combine several meshes into a single file
  • mesh_align: align 2 meshes using ICP
  • mesh_shade: a few procedural shaders for adding per-vertex color
  • mesh_check: check for some kinds of topological oddities (e.g., more than 2 faces at an edge) in a mesh file. Removes parts of the mesh to "clean it up" and leave it a manifold.
  • mesh_crunch: quick-n-dirty mesh decimation using the Rossignac-Borrel method of vertex collapse
  • mesh_info: print out some information about a mesh
  • xf: create or compose transformations in .xf files

The library is distributed under the GNU General Public License (GPL), version 2. The various libraries distributed with trimesh2 are open source, and are believed to be covered by GPL-compatible licenses. Please see the COPYING file.

The code is written in C++, and is known to compile using a recent (4.x) version of g++ on several Unix-like OSes (Linux x86 and x86-64, Solaris, Mac OSX). Compiling under Windows is possible using Cygwin or MinGW32. Anecdotally, the code compiles with MS Visual Studio .NET or later (not MSVC 6), but I am not able to support this – you're on your own. (However, I will gladly accept patches that fix compilation, and will consider patches that squash warnings.)

Warning: some gcc versions are known to miscompile trimesh2.
Please avoid version 4.1.2, or anything earlier than 4.0.1.

The author of trimesh2 is Szymon Rusinkiewicz.


Download

The most recent version is 2.16

The packages include source that should compile on Linux, Mac, and MINGW / Cygwin.


Changes

Changes version 2.15 → 2.16:

  • Be less aggressive about parallelization in ICP, to avoid MSVC problems.

Changes version 2.14 → 2.15:

  • Fix for a bug in the KDtree implementation. Please use version 2.15 instead of 2.14

Changes version 2.13 → 2.14:

  • Symmetric ICP implementation that includes the method presented in "A Symmetric Objective Function for ICP"
  • k-D tree implementation can now do approximate nearest-neighbor matching
  • The library and mesh_info client can now compute mesh overlap as IOU (intersection over union)
  • mesh_view will now use distance-adaptive point sizes when drawing point clouds
  • Many bug fixes, compile fixes, and code cleanups

Changes version 2.12 → 2.13:

  • Many re-writes of header files to accommodate a large variety of compilers and modern versions of C++
  • Generic (GLSL-like) functions have been split out from Vec.h into mathutil.h
  • Compatibility functions for earlier compilers have been moved to mathcompat.h
  • SVD implementation in lineqn.h
  • Significant updates to ICP
  • GLManager class to make it easier to use OpenGL buffers and shaders. mesh_view is updated to use it.
  • Many capabilities of mesh_make and mesh_filter are now available in the library - check TriMesh_algo.h for details
  • Can now create teapots - see make_teapot() or mesh_make teapot

Changes version 2.11 → 2.12:

  • Major user-visible change: the library and headers are now contained within the trimesh namespace. Existing code must be updated to refer to the TriMesh class and associated functions with an explicit namespace qualifier, or include the following declaration
    using namespace trimesh;
  • Compile fixes for Mac. The code should now correctly build into bin.Darwin64 and lib.Darwin64 on 64-bit capable versions of MacOS. A 32-bit build can be forced via "make darwin32".
  • Many fixes for signed-unsigned and std-namespace correctness.
  • Vec now contains the methods at, front, back, data, cbegin, cend, rbegin, rend, crbegin, crend, max_size, and fill for compatibility with C++11 arrays.
  • Bugfix for step() function.
  • More complete support for standard math library functions on Vecs.
  • fromarray and transp functions for XForms.
  • Yet another attempt at fixing KDtree and ICP for point sets with duplicate coordinates.
  • TriMesh::read() no longer triangulates grids by default. Code that works only with faces needs to call
    mesh->need_faces();
    explicitly.
  • mesh_make can now create surfaces of revolution from curves.

Changes version 2.10 → 2.11:

  • Separate type / header file for bounding boxes
  • Preliminary support for output of Collada .dae files
  • GLCamera supports axis-constrained rotation
  • Detection of "shared" vertices via mesh_filter -share and shared(TriMesh *mesh, float tol)
  • mesh_filter -tsmooth: smoothing with umbrella operator, constrained to tangent plane
  • mesh_info csize to print out bounding box center and size
  • mesh_view -grab command-line option to just render a single image and save it out
  • The Vec class now has a full set of comparison operators, so that vecs can be put into STL sets
  • Color has more accurate colorspace conversion matrices (and comments)
  • Many bug fixes, including correct multi-threaded subdivision and diffusion
  • Many compile fixes and code cleanups, including handling of PI, float vs. double, std::, cstddef, etc.

Changes version 2.9 → 2.10:

  • Many more options for computing mesh statistics in mesh_info, e.g.
    mesh_info in.ply median edgelen
    mesh_info in.ply total facearea
    mesh_info in.ply rms dihedral
    mesh_info in.ply overlap in2.ply
  • Moved connected-components computation into library, with mesh_cc just a wrapper
  • Parallelized connectivity and diffusion computations
  • Basic support for STL files
  • Support for per-vertex normals in OBJ files
  • More support for pointclouds, including normal computation based on (accelerated) k-nearest-neighbors
  • Stricter use of std namespace. This may require adding using declarations to client code for classes and functions that used to be injected into the global namespace by Vec.h, including std::vector, std::min, std::max, and std::swap.
  • Many bug, compile, and warning fixes

Changes version 2.8 → 2.9:

  • New utilities: mesh_check, mesh_crunch, mesh_info, and xf
  • Many small bugfixes, as well as fixes for compilation errors and warnings
  • Bugfixes for OpenMP directives
  • Componentwise functions (trigonometric, etc.) for Vec
  • Colorspace conversion for Color
  • The dist shader of mesh_shade now takes an absolute distance scale, instead of auto-scaling. (This is useful much more frequently than the previous behavior.)
  • mesh_view now uses glArrayElement instead of glDrawElements on Intel cards. This provides a considerable speedup on the machines available to me.
  • Provides the ability to install hooks (e.g. for GUI applications) for status/warning/error messages printed by trimesh2
  • Includes Darwin binaries

Changes version 2.7 → 2.8:

  • Many compilation, portability, and bug fixes
  • Colors are now stored as floats - this will require updating external code that uses trimesh2
  • Support for maintaining range grids as grids, instead of automatically converting to meshes upon read
  • Rudimentary (possibly broken, incomplete) support for reading VVD files
  • mesh_filter: Added bilateral mesh filtering using the method of [Jones et al. 2003]
  • mesh_make: Added Klein bottle, rhombic triacontahedron
  • OpenMP directives in a few places for multi-threading
  • Many functions moved from utilities into library

Changes version 2.6 → 2.7:

  • Miscellaneous compilation, portability, and bug fixes
  • mesh_filter: Added -pcasnap; added -fly (butterfly subdivision); more robust -orient
  • mesh_make: Added trefoil knot
  • Linux x86_64 libraries and binaries now go in lib.Linux64/ and bin.Linux64/

Changes version 2.5 → 2.6:

  • mesh_filter: Added -sharpen and -usmooth flags; bugfixes for Mac compilation, transforming meshes with normals
  • mesh_make: Fix for making cubes with tess = 1
  • mesh_align: ICP with isotropic or anisotropic (affine) scale
  • mesh_cat: Bugfix in handling normals, colors, etc.
  • mesh_shade: Added a few shaders, including coloring based on mesh-to-mesh distance
Changes version 2.4 → 2.5:
  • Fixed bug in curvature computation
  • Small bugfix in mesh_view
  • Compile fixes
  • Added mesh_shade with a few procedural shaders

Changes version 2.3 → 2.4:

  • Added mesh_align
  • XForm.h and some of the utility programs should now support affine transforms (as opposed to just rigid-body)
  • Added yet more options to mesh_filter

Changes version 2.2 → 2.3:

Changes version 2.1 → 2.2:

  • Added a couple of options to mesh_filter
  • Bugfix for depth readback on ATI cards with broken drivers

Changes version 2.0 → 2.1:

  • Added mesh_cat utility
  • Added several options to mesh_filter
  • Many bugfixes, including compilation errors, I/O, and mesh_view


Please contact smr at princeton edu if you have any questions about the code.








via Princeton Graphics Group

September 25, 2024 at 12:07AM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant