X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;ds=sidebyside;f=doc%2Findex.org;h=85829455fa5606865dcebe5dd0ef7db89ca68f25;hb=HEAD;hp=04f785f64fb6d0934a6dbb4f08c9307043e69356;hpb=7415236b125f8b0981c5f2e7c83475370caf4b63;p=sixth-3d.git
diff --git a/doc/index.org b/doc/index.org
index 04f785f..3fb3f08 100644
--- a/doc/index.org
+++ b/doc/index.org
@@ -1,42 +1,69 @@
#+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]]
+* (document settings) :noexport:
+** use dark style for TWBS-HTML exporter
+#+HTML_HEAD:
+#+HTML_HEAD:
+#+HTML_HEAD:
+#+HTML_HEAD:
-- 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.
+* General
+- This program is free software: released under Creative Commons Zero
+ (CC0) license
- Program author:
- Svjatoslav Agejenko
- - Homepage: http://svjatoslav.eu
+ - Homepage: https://svjatoslav.eu
- Email: mailto://svjatoslav@svjatoslav.eu
-- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
+- [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]]
-* (document settings) :noexport:
-** use dark style for TWBS-HTML exporter
-#+HTML_HEAD:
-#+HTML_HEAD:
-#+HTML_HEAD: "
-#+HTML_HEAD:
+** Source code
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]]
+
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=summary][Browse Git repository online]]
+
+- Clone Git repository using command:
+ : git clone https://www3.svjatoslav.eu/git/sixth-3d.git
+
+- See [[https://www3.svjatoslav.eu/projects/sixth-3d/apidocs/][JavaDoc]].
* Project description
-In-software, pure Java realtime 3D rendering engine. With the final
++ 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.
+interactive data visualization for [[https://www3.svjatoslav.eu/projects/sixth/][project Sixth]].
-+ See: [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][demos of current 3D engine capabilities]]
+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.
-System is implemented in Java because:
+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).
@@ -54,22 +81,19 @@ System is implemented in Java because:
- As a result it is 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.
-
-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.
+* 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
@@ -77,7 +101,7 @@ Maven *pom.xml* file snippet:
eu.svjatoslavsixth-3d
- 1.0
+ 1.2
...
@@ -87,14 +111,19 @@ Maven *pom.xml* file snippet:
svjatoslav.euSvjatoslav repository
- http://www2.svjatoslav.eu/maven/
+ http://www3.svjatoslav.eu/maven/
...
#+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
++ 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.
@@ -105,30 +134,29 @@ See [[file:codeGraph/index.html][generated code graph]] using [[http://www2.svja
+ 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.
-+ 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.
++ 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.
++ 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:
+ + Such information allows further optimizations:
- + Dynamic geometry simplification:
- + Dynamically detect and replace invisible objects from the
- scene with simplified bounding box.
+ + 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 replace boudnig box with actual object once it
+ becomes visible.
- + Dynamically unload unused textures from RAM.
+ + Dynamically unload unused textures from RAM.