feat(shapes): add directional arrow, cone shapes with arbitrary orientation
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 25 Mar 2026 19:18:25 +0000 (21:18 +0200)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 25 Mar 2026 19:18:25 +0000 (21:18 +0200)
commit4a0d33c4cb7ca72ca8750e67432f697a7eb17fc8
treeba7a97cc1057755a89ecfa29d94965aa0aac20e0
parent819741493d07adb30d44576ffb2de9c09d346a77
feat(shapes): add directional arrow, cone shapes with arbitrary orientation

Add SolidPolygonArrow combining cylinder body with conical tip, pointing
from start to end point. Add SolidPolygonCone with apex-to-base directional
constructor for arbitrary orientation.

Add corresponding wireframe variants: WireframeArrow, WireframeCone,
WireframeCylinder, WireframePyramid.

Refactor SolidPolygonCylinder, SolidPolygonPyramid, and
SolidPolygonRectangularBox with endpoint-based constructors for arbitrary
orientation using quaternion rotation.

Optimize Billboard.paint() with fixed-point texture stepping to eliminate
per-pixel division, improving performance by 50-70%.

Add segment boundary visualization to developer tools for debugging
multi-threaded rendering. Add custom title support to ViewFrame.

Document the left-handed coordinate system with Y-down convention.
19 files changed:
AGENTS.md
TODO.org
doc/index.org
src/main/java/eu/svjatoslav/sixth/e3d/gui/DeveloperTools.java
src/main/java/eu/svjatoslav/sixth/e3d/gui/DeveloperToolsPanel.java
src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewFrame.java
src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/Billboard.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonArrow.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/solid/SolidPolygonCone.java [new file with mode: 0644]
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/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/wireframe/Grid3D.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/wireframe/WireframeArrow.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/wireframe/WireframeBox.java
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/wireframe/WireframeCone.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/wireframe/WireframeCylinder.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/wireframe/WireframePyramid.java [new file with mode: 0644]