sghr / iGeo

iGeo: Computational Design and 3D Modeling Library for Processing
http://igeo.jp
GNU Lesser General Public License v3.0
146 stars 34 forks source link

uv() method in ISurface has a problem at the seams #4

Open ghost opened 10 years ago

ghost commented 10 years ago

When using the uv() function to project a point (IVec) on to a surface, there seem to be a problem if the surface is closed (like a tube or a cylinder).

A picture is worth a thousand words so :

capture decran 2013-11-11 a 21 56 58 The black line is where the UV coordinates wrap back, the red dots are projected through the yellow arrow to the magenta points. Around the seam, the projected points end up on the seam instead of their normal place.

Also, every 10 points or so, the projection is a bit off. Dunno if it's related or not...

I hope this can help correcting it !

sghr commented 10 years ago

Thank you for pointing out the issue. I haven't found time to work on it yet but when I do I'll let you know. The issue on the edge of the surface seems to be something I should fix but another issue of being off every 10 points are due to the quick approximation algorithm I use.

Mapping from uv -> xyz is mathematically precise but invert mapping of xyz -> uv is approximation and more precise approximation requires more CPU time. If you know an efficient and highly precise algorithm, let me know.

Thanks, Satoru