From time to time, I like playing with 3D graphics, especially from a programmer’s point of view.
Constructive solid geometry, or CSG, is a modeling technique involving combining simpler objects with Boolean operations to obtain more complex ones.
A while ago, I found an implementation as a JavaScript library: CSG.js.
It really is brilliant because it is a complete tool in less than 600 rows, half of which are explanatory comments.
Its foundations are the clipping and the inversion operation. The former removes parts of a BSP tree inside another BSP tree, the latter swaps solid and empty space.
CSG.js combines them cleverly to implement Boolean union, subtraction, and intersection.
Even from a software engineering perspective, its author made some acute choices. And as a result, this project did not need to be updated in the latest ten years!
For example, library users can implement vertices with custom properties thanks to duck typing. They just need to implement a few methods and have a pos
member. In this way, it is possible, for instance, to manage texture coordinates. … [Leggi il resto]