refactored documentation structure
[sixth-3d.git] / doc / index.org
index 6f974ef..b164b18 100644 (file)
 #+TITLE: Sixth 3D - 3D engine
 
------
-- This is a subproject of [[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][Sixth]]
-
-- [[http://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz][download latest snapshot]]
-
-- This program is free software; you can redistribute it and/or modify it under
-  the terms of version 3 of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] or later as
-  published by the Free Software Foundation.
-
-- Program author:
-  - Svjatoslav Agejenko
-  - Homepage: http://svjatoslav.eu
-  - Email: mailto://svjatoslav@svjatoslav.eu
-
-- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
-
 * (document settings) :noexport:
 ** use dark style for TWBS-HTML exporter
-#+HTML_HEAD: <link href="https://bootswatch.com/darkly/bootstrap.min.css" rel="stylesheet">
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
+#+HTML_HEAD: <link href="https://bootswatch.com/3/darkly/bootstrap.min.css" rel="stylesheet">
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
 #+HTML_HEAD: <style type="text/css">
 #+HTML_HEAD:   footer {background-color: #111 !important;}
 #+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
 #+HTML_HEAD: </style>
 
-* Project description
-In software, pure Java realtime 3D rendering engine. With the final goal of
-becoming a platform for buildng 3D user interfaces.
+* General
+- This is a subproject of [[https://www3.svjatoslav.eu/projects/sixth/][Sixth]]
 
-+ See: [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][demos of current 3D engine capabilities]]
+- This program is free software: you can redistribute it and/or modify
+  it under the terms of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] as
+  published by the Free Software Foundation, either version 3 of the
+  License, or (at your option) any later version.
 
+- Program author:
+  - Svjatoslav Agejenko
+  - Homepage: https://svjatoslav.eu
+  - Email: mailto://svjatoslav@svjatoslav.eu
 
-System is implemented in Java because:
-- It scales well to handle great complexity.
-- It is easy to refactor and experiment with.
-- It is fast enough thanks to Java virtual machine just-in-time compiler.
-- Easy to run on various hardware platforms and operating systems.
+- [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]]
 
-3D rendering is done in software, 100% pure Java on CPU. At least for now.
-Modern CPU cores count keeps growing and therefore rendering by CPU is not as
-expensive as it used to be for the old single core systems.
+** Source code
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]]
 
-CPU rendering performance is already good enough to implement usable 3D UI at
-sufficient detail level, resolution and frame rate.
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=summary][Browse Git repository online]]
 
-Pure Java also means easy portability and installation. No need to deal with
-platform specific dependencies.
+- Clone Git repository using command:
+  : git clone https://www2.svjatoslav.eu/git/sixth-3d.git
 
-Also CPU rendering allows to easily test different rendering algorithms and
-retains complete control of every rendered pixel.
+- See [[https://www3.svjatoslav.eu/projects/sixth-3d/apidocs/][JavaDoc]].
 
-* Software development
-** TODO
-+ partial (region) frame repaint
-+ antialiazing
-** Instructions to embed Sixth-3D in your project
+* Project description
++ See: [[https://www3.svjatoslav.eu/projects/sixth-3d-demos/][demos of current 3D engine capabilities]]
+
+[[id:d03013e5-931b-40ca-bc4b-e4b3f23b9a4e][In software]], [[id:a11f7150-1b25-4ca4-a3c3-8c8bd1352bd4][pure Java]] realtime 3D rendering engine. With the final
+goal of becoming a platform for buildng 3D user interfaces and
+interactive data visualization for [[https://www3.svjatoslav.eu/projects/sixth/][project Sixth]].
+
+Sixth 3D can be also used as standalone [[id:08f71987-90af-40dc-bb65-bac87db9e652][3D engine in your project]].
+
+** Justification for software rendering
+   :PROPERTIES:
+   :ID:       d03013e5-931b-40ca-bc4b-e4b3f23b9a4e
+   :END:
+3D rendering is done in software, 100% pure Java on CPU. At least for
+now. Modern CPU cores count keeps growing and therefore rendering by
+CPU is not as expensive as it used to be for the old single core
+systems.
+
+CPU rendering performance is already good enough to implement usable
+3D UI at sufficient detail level, resolution and frame rate.
+
+Also CPU rendering allows to freely test different rendering and
+optimization algorithms and retains complete control of every rendered
+pixel.
+** Justification for Java
+   :PROPERTIES:
+   :ID:       a11f7150-1b25-4ca4-a3c3-8c8bd1352bd4
+   :END:
+- It is easy to refactor and experiment with.
+
+- Easy portability and installation. No need to deal with platform
+  specific dependencies.
+
+- It scales well to handle great complexity.
+  - Allows to implement clever performance optimizations (instead of
+    going for GPU offered brute-force rendering approach).
+
+- No limitations imposed by:
+  - requirement for decent GPU
+  - GPU missing features
+  - GPU missing/incomplete/buggy drivers
+  - OpenGL specification
+
+- It is fast enough thanks to:
+  - Java virtual machine just-in-time compiler.
+  - Growing CPU cores count.
+
+- As a result it is easy to run on various hardware platforms and
+  operating systems.
+
+* API documentation
+- See [[https://www3.svjatoslav.eu/projects/sixth-3d/apidocs/][JavaDoc]].
+
+Note: due to a lack of time, there is still big room for improvement
+on documentation.
+
+So far best resource is to download and explore source code for:
++ 3D engine ([[https://www3.svjatoslav.eu/projects/sixth-3d/graphs/][generated code graphs]] (generated using [[https://www3.svjatoslav.eu/projects/javainspect/][JavaInspect]]))
++ For API usage examples, see [[https://www3.svjatoslav.eu/projects/sixth-3d-demos/][demos]]
+* Instructions to embed Sixth-3D in your project
+  :PROPERTIES:
+  :ID:       08f71987-90af-40dc-bb65-bac87db9e652
+  :END:
 Maven *pom.xml* file snippet:
 #+BEGIN_SRC xml
 <dependencies>
@@ -64,7 +105,7 @@ Maven *pom.xml* file snippet:
     <dependency>
         <groupId>eu.svjatoslav</groupId>
         <artifactId>sixth-3d</artifactId>
-        <version>1.0</version>
+        <version>1.1</version>
     </dependency>
     ...
 </dependencies>
@@ -80,4 +121,42 @@ Maven *pom.xml* file snippet:
 </repositories>
 #+END_SRC
 
-See [[file:codeGraph/index.html][generated code graph]] using [[http://www2.svjatoslav.eu/gitbrowse/javainspect/doc/index.html][this tool]].
+For API usage examples, see [[https://www3.svjatoslav.eu/projects/sixth-3d-demos/][demos]].
+* TODO features to add
++ 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, in would be easy to add multi-core
+  rendering support. So that each core renders it's own region of the
+  screen.
+
++ Antialiazing. Would improve text readability. If antialiazing 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.
+  + 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 boudnig box with actual object once it
+          becomes visible.
+
+      + Dynamically unload unused textures from RAM.