pmneila / PyMCubes

Marching cubes (and related tools) for Python
BSD 3-Clause "New" or "Revised" License
692 stars 87 forks source link

If lower bound higher then SDF range then there are duplicate vertices #22

Closed asyniakov closed 4 years ago

asyniakov commented 4 years ago

let's say you want to create a sphere R = 1 in (0,0,0) and set lower to (0,0,0) and upper to (4,4,4), numxyz = 100, 100, 100. then result is image

you can see duplicate vertices on the boundaries.

pmneila commented 4 years ago

Hi @asyniakov,

Just in case, could you give me a minimal piece of code that reproduces the problem?

Also, what are the duplicate vertices in your image? The yellow dots? Did you explicitly find and draw the duplicate vertices?

asyniakov commented 4 years ago

Hello @pmneila,

Sure! Here is a minimal piece of code that reproduces the problem:

The sphere is located in C = {4,4,4} with diameter 8. bbox is {2,2,2} and {8,8,8}

auto sdf = [](auto p){
    return length(p - { 4,4,4 }) - 4;
};

mc::marching_cubes({2, 2, 2}, { 9, 9, 9 }, 20, 20, 20, sdf, 0, vertices, polygons);

Please ignore my previous image, here is the better visualization of the problem; image red vertices - are duplicate vertices (which I believe is incorrect), yellow ones are boundary vertices (they are OK).

The main question - how did I find duplicate vertices (red ones)? I passed vertices and polygons to OpenMesh library (that uses halfedge data structure inside for the topology) and then simply highlighted all boundary vertices. As a result, I got the image as in my previous post. I expected to see yellow dots only on boundaries. I double-checked array before passing to OpenMesh and there are duplicates indeed.

This problem is repro on any sdfs that are "clipped" by lower value (like 2,2,2 in this example)

Please let me know what else I can help with.

pmneila commented 4 years ago

Hi @asyniakov

It took longer than expected, but it is finally fixed. You can install the last version with

$ pip install PyMCubes --upgrade

or downloading and compiling the code from GitHub.

Thank you for letting me know!

asyniakov commented 4 years ago

@pmneila thank you! I'll try check it next week and let you know if find some other issues.

asyniakov commented 4 years ago

fixed. confirmed