mirror of
https://github.com/kristov/ldraw2stl.git
synced 2025-05-15 14:20:11 -07:00
Before this commit it appeared that STL viewers could handle the output. However, rendering the models in OpenGL revealed that the surface normals were all messed up. I believe most STL viewers just don't care about surface normals, because I suppose they don't really matter for 3d slicing. The problem ended up being really a complex issue around the winding order of triangles in sub-parts, and how this is affected by the "inversion" state. The winding order of triangles in ldraw is a complex combination of BFC meta commands and transformation matricies that "mirror" sub-parts. I tried to leave extensive comments in the code rather than go into it in the commit message. Also added a json output for rendering as OpenGL buffers. This is to help me debug issues with the surface normals. While working on this I also realized that the output of parsing a sub-part can be cached, as long at the "invert" flag is part of the cache key. This could make a huge difference in performance, because for example a "stud" gets generated many many times, and in this version of the code that results in a lot of repeated processing.