Skip to content
apetrockPublic

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

1 watching

Forks

Latest commit

 

History

85 Commits

Folders and files

Repository files navigation

libGaudi

About

libGaudi is a topological dynamic mesh library. In addition to handling the common edge splits and collapses, it also handles an edge-edge merge. Why not just use El Topo? libGaudi handles topological merges a little differently, via vertex merge and edge rotation. Its perhaps a little more elegant than the topological operation El Topo uses... but there is also a lot of other stuff thats fun to use. The mesh structure is completely pointerless and dataless. Data is handled as a seperate class with custom predicates to determine what happens when the topology changes.

Project Features:

  • Almost completely headerless, except for a singleton visual debugging logger... although a TODO is to move implementation to c++20 modules, since compile times are pretty bothersome

Half-edge Mesh

  • Pointerless, dataless, half edge mesh data structure
  • Data is stored in seperate arrays with the ability to add custom split/collapse predicates, coordinates are not baked into the half edge structure

BVH

  • Generic BVH tree for handling simplex structures

Hierarchical integrator

  • Hierarchical integrator for solutions to Poisson equation / Boundary integrals
  • Fast Winding Number solver
  • Repulsive Curves/Surfaces solver example
  • Hierarchical harmonic Quadric fitting... actually I include quite a few routines for fitting implicite surfaces, quadrics, spheres, cyclides, cylinders...
  • Simple Continuous Collision detection based on maximum velocity manifold (experimental)

Mesh Poisson Solver

  • Geodesic Heat Solver
  • Grey-Scott Reaction diffusion with Newton-Raphson solve

Projection based solver

  • Similar to ShapeOp
  • Solver uses a unique block format which lets you write custom blocks for interacting with the global matrix
  • Cosserat rod and mesh implementation which allows coupled contraints

Geodesic Walks

  • Geodesic walks on the mesh surface and subsequent subdivision while preserving underlying data

Viewer

  • Debugging is an immediate-mode like logger that lets you push a handful of primitives to be rendered each frame using geometry shaders.
  • Screen Space Ambient Occlusion
  • Screen Space Color Bleed
  • Simple Framebuffer Grabber for grabbing mpeg movies

Future work:

  • C++ 20 Module to speed up compile times

  • explore possible herarchical domain decomposition based on projections

  • Improve predicates to properly handle face/edge data

  • No parallelism/No GPU, that stuff takes time and is tricky with graph data structures, but I want to?

  • BVH parallism, improve confusing API

  • Biased Poisson solve based on input direction field

  • Combined Rods/Mesh projection solver

  • Add ability to scrape the debug logger to make completely headerless

  • How about a full path tracer?

  • Seperate the viewer into a seperate project

Dependencies:

viewer: Nanogui, GLFW, Eigen, Mesh Library: Eigen

Some examples:

(back to top)

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages