feat: unify polygon type for CSG and rendering feat master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 30 Mar 2026 16:44:01 +0000 (19:44 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 30 Mar 2026 16:44:01 +0000 (19:44 +0300)
commit54d3ee5029832f4ecb802a67cfdf006c74ca73e3
tree9d85082faef7028cdebfe0b8783191db28fbfb4f
parent428d163d0b3e9d09ba42ed27862921ca1ef39cfa
feat: unify polygon type for CSG and rendering

Extend SolidPolygon to support N-vertex convex polygons, enabling
direct use in CSG operations without triangulation. Move CSG boolean
operations (union, subtract, intersect) from the standalone CSG class
to AbstractCompositeShape for in-place modifications with simpler API.

- SolidPolygon now handles arbitrary convex polygons via fan triangulation
- CSG operations work directly on SolidPolygon, eliminating CSGPolygon
- Add chainable setters to AbstractCompositeShape for fluent API
- Add non-mutating methods to Point2D/Point3D/Transform
- Rename TexturedPolygon to TexturedTriangle for consistency
- Fix vertex cloning, polygon validation, collinear point detection
- Use ThreadLocal fields for thread-safe rendering state
44 files changed:
AGENTS.md
doc/Axis.png [deleted file]
doc/Minimal example.png [deleted file]
doc/Winding order demo.png [deleted file]
doc/index.org
doc/perspective-correct-textures/index.org
src/main/java/eu/svjatoslav/sixth/e3d/csg/CSG.java [deleted file]
src/main/java/eu/svjatoslav/sixth/e3d/csg/CSGNode.java
src/main/java/eu/svjatoslav/sixth/e3d/csg/CSGPlane.java
src/main/java/eu/svjatoslav/sixth/e3d/csg/CSGPolygon.java [deleted file]
src/main/java/eu/svjatoslav/sixth/e3d/geometry/Box.java
src/main/java/eu/svjatoslav/sixth/e3d/geometry/Point2D.java
src/main/java/eu/svjatoslav/sixth/e3d/geometry/Point3D.java
src/main/java/eu/svjatoslav/sixth/e3d/geometry/Polygon.java
src/main/java/eu/svjatoslav/sixth/e3d/geometry/Rectangle.java
src/main/java/eu/svjatoslav/sixth/e3d/gui/Camera.java
src/main/java/eu/svjatoslav/sixth/e3d/math/Transform.java
src/main/java/eu/svjatoslav/sixth/e3d/math/Vertex.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/octree/raytracer/CameraView.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/Color.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/AbstractCoordinateShape.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/Billboard.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/line/Line.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/solidpolygon/LineInterpolator.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/solidpolygon/SolidPolygon.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/solidpolygon/package-info.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/PolygonBorderInterpolator.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedPolygon.java [deleted file]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedTriangle.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/package-info.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/Graph.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/TexturedRectangle.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/base/AbstractCompositeShape.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/base/SubShape.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonArrow.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonCone.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonCylinder.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonMesh.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonPyramid.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonRectangularBox.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/package-info.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/textcanvas/CanvasCharacter.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/slicer/Slicer.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/texture/Texture.java