X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=doc%2Findex.org;h=a0b08a2715003c699b0571bcf78447c1d8fcdaa5;hb=359693b60cec17a2a662de310f7d53104cfc8649;hp=6d1a89d28549095c207bc7f047316cf6930d7a6b;hpb=439e676d68b70ed18dc2ca83c1581d635228a49f;p=sixth-3d.git
diff --git a/doc/index.org b/doc/index.org
index 6d1a89d..a0b08a2 100644
--- a/doc/index.org
+++ b/doc/index.org
@@ -14,11 +14,11 @@
- Homepage: http://svjatoslav.eu
- Email: mailto://svjatoslav@svjatoslav.eu
-- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
+- [[http://www.svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
* (document settings) :noexport:
** use dark style for TWBS-HTML exporter
-#+HTML_HEAD:
+#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD: "
#+HTML_HEAD:
-
* Project description
-In software, pure Java realtime 3D rendering engine. With the final goal of
-becoming a platform for buildng 3D user interfaces.
-
+ See: [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][demos of current 3D engine capabilities]]
-
-System is implemented in Java because:
-- It scales well to handle great complexity.
+[[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 [[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html][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.
-- It is fast enough thanks to Java virtual machine just-in-time compiler.
-- Easy to run on various hardware platforms and operating systems.
-
-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.
+- Easy portability and installation. No need to deal with platform
+ specific dependencies.
-Pure Java also means easy portability and installation. No need to deal with
-platform specific dependencies.
-
-Also CPU rendering allows to easily test different rendering algorithms and
-retains complete control of every rendered pixel.
-
-* Software development
-Instructions to embed Sixth-3D in your project as a library. Maven *pom.xml*
-file snippet:
+- 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.
+
+* TODO API documentation
+Documentation currently missing for the lack of time.
+
+So far best resource is to download and explore source code for:
++ 3D engine ([[file:codeGraph/index.html][generated code graph]] (generated using [[http://www2.svjatoslav.eu/gitbrowse/javainspect/doc/index.html][this tool]]))
++ For API usage examples, see [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][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
...
eu.svjatoslavsixth-3d
- 1.0
+ 1.1
...
@@ -78,4 +109,42 @@ file snippet:
#+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 [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][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.