Giter VIP home page Giter VIP logo

v-hacd's Introduction

v-hacd

The V-HACD library decomposes a 3D surface into a set of "near" convex parts Alt text

Why do we need approximate convex decomposition?

Collision detection is essential for realistic physical interactions in video games and computer animation. In order to ensure real-time interactivity with the player/user, video game and 3D modeling software developers usually approximate the 3D models composing the scene (e.g. animated characters, static objects...) by a set of simple convex shapes such as ellipsoids, capsules or convex-hulls. In practice, these simple shapes provide poor approximations for concave surfaces and generate false collision detection. Alt text A second approach consists in computing an exact convex decomposition of a surface S, which consists in partitioning it into a minimal set of convex sub-surfaces. Exact convex decomposition algorithms are NP-hard and non-practical since they produce a high number of clusters. To overcome these limitations, the exact convexity constraint is relaxed and an approximate convex decomposition of S is instead computed. Here, the goal is to determine a partition of the mesh triangles with a minimal number of clusters, while ensuring that each cluster has a concavity lower than a user defined threshold.

Alt text

More approximate convex decomposition results

Alt text Alt text Alt text Alt text Alt text

v-hacd's People

Contributors

kmammou avatar

Watchers

 avatar

v-hacd's Issues

Callback needs to be called more often

The user callback that displays progress is not called often enough to prevent 
a GUI application from going into "not responding" mode.  The total percentage 
complete goes to 15% very quickly, then stalls for a couple of minutes and 
jumps to 90%, then finishes quickly.  In order to be useful, that callback 
should really get called a lot more often, so the user doesn't think there is 
something wrong with the program.

Original issue reported on code.google.com by [email protected] on 16 Dec 2014 at 5:45

Introduce a context variable to control and abort

As discussed via email, it would be great to have some kind of a context 
variable that allows mainly for two things:

 * Be able to cancel the execution of long running V-HACD functions. There has to be a reasonable tradeoff between response time and performance. Execution does not need to interrupt immediately but with an approximate grace period of, say between 10 and 30 seconds. I need to set this from an outside thread (in a callback?) and the function will stop at the next given opportunity. Preferably including cleanup of temp data.

 * The same mechanism should be able to give me an approximation of progress. Ideally in percent of total time. Again, this doesn't need to be precise. Just a rough indication for the user to know how long this will take.

I suggest a context object interface that is implemented by the user and can be 
passed in. It could look like this:

namespace VHACD {

struct IControlFlow {

    // called by vhacd to tell the total progress.
    // (optional, could resort to always 100 percent)
    // it would be ideal if this would be called only
    // once and not change afterwards but I guess that 
    // would be hard to achieve
    void set_total_progress(std::size_t p) throw () = 0;

    // called by vhacd to indicate how much progress
    // has been made. Must be between 0 and set_total_progress()
    void set_progress(std::size_t p) throw () = 0;

    // called by vhacd regularily
    // if it returns false, the algo is aked to stop at
    // the next given occasion 
    bool continue() throw () = 0;
}

}

The user will implement this object and pass it to ApproximateDecomposition().

Would be awesome.

Thanks,
Stephan


Original issue reported on code.google.com by [email protected] on 2 Dec 2014 at 9:00

Make CMake inclusion of FindOpenCL OPTIONAL

For those of us who don't have OpenCL installed could you make the inclusion of 
FindOpenCL optional.

In src/VHACD_Lib/CMakeLists.txt and src/test/CMakeLists.txt
change "include (FindOpenCL)" to "include (FindOpenCL OPTIONAL)".



Original issue reported on code.google.com by [email protected] on 17 Jan 2015 at 6:03

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.