docs: add TODO roadmap
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Fri, 20 Mar 2026 20:51:34 +0000 (22:51 +0200)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Fri, 20 Mar 2026 20:51:34 +0000 (22:51 +0200)
- Add comprehensive TODO roadmap with organized sections
- Consolidate future ideas into TODO.org
- Remove outdated ideas and simplify structure

TODO.org [new file with mode: 0644]
doc/index.org

diff --git a/TODO.org b/TODO.org
new file mode 100644 (file)
index 0000000..25051af
--- /dev/null
+++ b/TODO.org
@@ -0,0 +1,95 @@
+* Documentation
+** Clarify axis orientation (X, Y, Z) for AI assistants and developers
+Add a coordinate system diagram to the documentation.
+
+* Add 3D mouse support
+
+* Demos
+** Add more math formula examples to "Mathematical formulas" demo
+** Allow manual thread count specification in performance test demo
+By default, suggest using half of the available CPU cores.
+
+** Rename shaded polygon demo to "Shape Gallery" or "Shape Library"
+Extend it to display all available primitive shapes with labels,
+documenting each shape and its parameters.
+
+* Performance
+** Benchmark optimal CPU core count
+Determine the ideal number of threads for rendering.
+
+** Autodetect optimal thread count
+Use half of available cores by default, but benchmark first to find
+the sweet spot.
+
+** Developer tool: visualize render segment boundaries
+Draw borders around render segments to show which thread renders which
+area. Allow dynamic segment size adjustment to balance CPU load evenly
+between threads.
+
+** Investigate additional performance optimizations
+Focus on critical pixel fill loops:
+- Textured polygon
+- Flat polygon
+- Line
+- Billboard
+
+* Features
+** Add quaternion math to replace or supplement current rotor system
+** Add polygon reduction based on view distance (LOD)
+** Add object fading based on view distance
+Goal: make it easier to distinguish nearby objects from distant ones.
+
+** Add support for constructive solid geometry (CSG) boolean operations
+** Describe how shading works
+
+Make separate demo about that with shaded spheres and some light
+sources.
+
+Make dedicated tutorial about shading algorithm with screenshot and
+what are available parameters.
+
+** Add shadow casting
+
++ Note: Maybe skip this and go straight for: [[id:bcea8a81-9a9d-4daa-a273-3cf4340b769b][raytraced global
+  illumination]].
+
+Study how shadows are done. Evaluate realtime shadows vs pre-baked
+shadows.
+
+** Add raytraced global illumination support
+:PROPERTIES:
+:ID:       bcea8a81-9a9d-4daa-a273-3cf4340b769b
+:END:
+
+- Raytracing must have configurable ray bounce count.
+- Raytracing results should be cached and cache must be updated
+  on-demand or when light sources or geometry changes.
+
+** Move TODO from index.org into current file
+** Add dynamic resolution support
++ When there are fast-paced scenes, dynamically and temporarily reduce
+  image resolution if needed to maintain desired FPS.
+
+* Add clickable vertexes
+
+Circular areas with radius. Can be visible, partially transparent or
+invisible.
+
+Use them in 3D graph demo. Clicking on vertexes should place marker
+and information billboard showing values at given XYZ location.
+
+Add formula textbox display on top of 3D graph.
+- Consider making separate formula explorer app where formula will be
+  editable and there will be gallery of pre-vetted formulas.
+  - make this app under Sixth parent project.
+    - Consider integrating with FriCAS or similar CAS software so that
+      formula parsing and computation happens there.
+
+* Bugs
+** Fix text rendering outside thread-specific drawing area
+Occurs when text is forward-oriented.
+* Study and apply where applicable
++ Read this as example, and apply improvements/fixes where applicable:
+  http://blog.rogach.org/2015/08/how-to-create-your-own-simple-3d-render.html
+
++ Improve triangulation. Read: https://ianthehenry.com/posts/delaunay/
index 4b7eafc..4f08956 100644 (file)
@@ -708,58 +708,4 @@ so multiple views can have different debug configurations simultaneously.
   [[https://www3.svjatoslav.eu/projects/javainspect/][JavaInspect]] utility)
 - Study [[https://www3.svjatoslav.eu/projects/sixth-3d-demos/][demo applications]].
 
-* Future ideas
-:PROPERTIES:
-:CUSTOM_ID: future-ideas
-:ID:       2258231b-007d-42d3-9ba9-a9957a0dfc56
-:END:
-
-+ Read this as example, and apply improvements/fixes where applicable:
-  http://blog.rogach.org/2015/08/how-to-create-your-own-simple-3d-render.html
-
-+ Improve triangulation. Read: https://ianthehenry.com/posts/delaunay/
-
-+ Partial region/frame repaint: when only one small object changed on
-  the scene, it would be faster to re-render that specific area.
-
-  + Once partial rendering works, it would be easy to add multi-core
-    rendering support. So that each core renders its own region of
-    the screen.
-
-+ Anti-aliasing. Would improve text readability. If antialiasing is
-  too expensive for every frame, it could be used only for last frame
-  before animations become still and waiting for user input starts.
-
-** Render only visible polygons
-:PROPERTIES:
-:CUSTOM_ID: render-only-visible-polygons
-:ID:       c32d839a-cfa8-4aec-a8e0-8c9e7ebb8bba
-:END:
-
-Very high-level idea description:
-
-+ This would significantly reduce RAM <-> CPU traffic.
-
-+ General algorithm description:
-  + For each horizontal scanline:
-    + sort polygon edges from left to right
-    + while iterating and drawing pixels over screen X axis (left to
-      right) track next appearing/disappearing polygons.
-      + For each polygon edge update Z sorted active polygons list.
-      + Only draw pixel from the top-most polygon.
-        + Only if polygon area is transparent/half-transparent add
-          colors from the polygons below.
-
-+ As a bonus, this would allow to track which polygons are really
-  visible in the final scene for each frame.
-
-  + Such information allows further optimizations:
-
-    + Dynamic geometry simplification:
-      + Dynamically detect and replace invisible objects from the
-        scene with simplified bounding box.
-
-      + Dynamically replace bounding box with actual object once it
-        becomes visible.
 
-    + Dynamically unload unused textures from RAM.