prefer HTTPS in documentation
[sixth-3d.git] / doc / index.html
index 68eafc0..813ea56 100644 (file)
@@ -2,12 +2,12 @@
 <html lang="en">
 <head>
 <title>Sixth 3D - 3D engine</title>
-<!-- 2017-01-22 Sun 23:18 -->
+<!-- 2019-01-19 Sat 00:51 -->
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="generator" content="Org-mode">
 <meta name="author" content="Svjatoslav Agejenko">
-<link href="https://bootswatch.com/darkly/bootstrap.min.css" rel="stylesheet">
+<link href="https://bootswatch.com/4/darkly/bootstrap.min.css" rel="stylesheet">
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
 <style type="text/css">
@@ -198,132 +198,281 @@ $(function() {
 <div class="row"><div class="col-md-9"><h1 class="title">Sixth 3D - 3D engine</h1>
 <hr >
 <ul class="org-ul">
-<li>This is a subproject of <a href="http://www2.svjatoslav.eu/gitbrowse/sixth/doc/index.html">Sixth</a>
+<li>This is a subproject of <a href="https://www3.svjatoslav.eu/projects/sixth/">Sixth</a>
 </li>
 
-<li><a href="http://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz">download latest snapshot</a>
+<li>Clone GIT repository using command:
+<pre class="example">
+git clone https://www2.svjatoslav.eu/git/sixth-3d.git
+
+</pre>
+</li>
+
+<li><a href="https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a>
 </li>
 
-<li>This program is free software; you can redistribute it and/or modify it under
-the terms of version 3 of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a> or later as
-published by the Free Software Foundation.
+<li>This program is free software: you can redistribute it and/or modify
+it under the terms of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a> as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
 </li>
 
 <li>Program author:
 <ul class="org-ul">
 <li>Svjatoslav Agejenko
 </li>
-<li>Homepage: <a href="http://svjatoslav.eu">http://svjatoslav.eu</a>
+<li>Homepage: <a href="https://svjatoslav.eu">https://svjatoslav.eu</a>
 </li>
 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
 </li>
 </ul>
 </li>
 
-<li><a href="http://svjatoslav.eu/programs.jsp">other applications hosted at svjatoslav.eu</a>
+<li><a href="https://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a>
 </li>
 </ul>
 
 <div id="outline-container-sec-1" class="outline-2">
 <h2 id="sec-1"><span class="section-number-2">1</span> Project description</h2>
 <div class="outline-text-2" id="text-1">
-<p>
-In software, pure Java realtime 3D rendering engine. With the final goal of
-becoming a platform for buildng 3D user interfaces.
-</p>
-
 <ul class="org-ul">
-<li>See: <a href="http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html">demos of current 3D engine capabilities</a>
+<li>See: <a href="https://www3.svjatoslav.eu/projects/sixth-3d-demos/">demos of current 3D engine capabilities</a>
 </li>
 </ul>
 
+<p>
+<a href="#sec-1-1">In software</a>, <a href="#sec-1-2">pure Java</a> realtime 3D rendering engine. With the final
+goal of becoming a platform for buildng 3D user interfaces and
+interactive data visualization for <a href="https://www3.svjatoslav.eu/projects/sixth/">project Sixth</a>.
+</p>
 
 <p>
-System is implemented in Java because:
+Sixth 3D can be also used as standalone <a href="#sec-3">3D engine in your project</a>.
 </p>
+</div>
+
+<div id="outline-container-sec-1-1" class="outline-3">
+<h3 id="sec-1-1"><a id="ID-d03013e5-931b-40ca-bc4b-e4b3f23b9a4e" name="ID-d03013e5-931b-40ca-bc4b-e4b3f23b9a4e"></a><span class="section-number-3">1.1</span> Justification for software rendering</h3>
+<div class="outline-text-3" id="text-1-1">
+<p>
+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.
+</p>
+
+<p>
+CPU rendering performance is already good enough to implement usable
+3D UI at sufficient detail level, resolution and frame rate.
+</p>
+
+<p>
+Also CPU rendering allows to freely test different rendering and
+optimization algorithms and retains complete control of every rendered
+pixel.
+</p>
+</div>
+</div>
+<div id="outline-container-sec-1-2" class="outline-3">
+<h3 id="sec-1-2"><a id="ID-a11f7150-1b25-4ca4-a3c3-8c8bd1352bd4" name="ID-a11f7150-1b25-4ca4-a3c3-8c8bd1352bd4"></a><span class="section-number-3">1.2</span> Justification for Java</h3>
+<div class="outline-text-3" id="text-1-2">
 <ul class="org-ul">
+<li>It is easy to refactor and experiment with.
+</li>
+
+<li>Easy portability and installation. No need to deal with platform
+specific dependencies.
+</li>
+
 <li>It scales well to handle great complexity.
+<ul class="org-ul">
+<li>Allows to implement clever performance optimizations (instead of
+going for GPU offered brute-force rendering approach).
 </li>
-<li>It is easy to refactor and experiment with.
+</ul>
 </li>
-<li>It is fast enough thanks to Java virtual machine just-in-time compiler.
+
+<li>No limitations imposed by:
+<ul class="org-ul">
+<li>requirement for decent GPU
 </li>
-<li>Easy to run on various hardware platforms and operating systems.
+<li>GPU missing features
+</li>
+<li>GPU missing/incomplete/buggy drivers
+</li>
+<li>OpenGL specification
 </li>
 </ul>
+</li>
 
-<p>
-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.
-</p>
+<li>It is fast enough thanks to:
+<ul class="org-ul">
+<li>Java virtual machine just-in-time compiler.
+</li>
+<li>Growing CPU cores count.
+</li>
+</ul>
+</li>
 
-<p>
-CPU rendering performance is already good enough to implement usable 3D UI at
-sufficient detail level, resolution and frame rate.
-</p>
+<li>As a result it is easy to run on various hardware platforms and
+operating systems.
+</li>
+</ul>
+</div>
+</div>
+</div>
 
+<div id="outline-container-sec-2" class="outline-2">
+<h2 id="sec-2"><span class="section-number-2">2</span> <span class="label label-primary TODO">TODO</span> API documentation</h2>
+<div class="outline-text-2" id="text-2">
 <p>
-Pure Java also means easy portability and installation. No need to deal with
-platform specific dependencies.
+Documentation currently missing for the lack of time.
 </p>
 
 <p>
-Also CPU rendering allows to easily test different rendering algorithms and
-retains complete control of every rendered pixel.
+So far best resource is to download and explore source code for:
 </p>
+<ul class="org-ul">
+<li>3D engine (<a href="https://www3.svjatoslav.eu/projects/sixth-3d/graphs/">generated code graphs</a> (generated using <a href="https://www3.svjatoslav.eu/projects/javainspect/">JavaInspect</a>))
+</li>
+<li>For API usage examples, see <a href="https://www3.svjatoslav.eu/projects/sixth-3d-demos/">demos</a>
+</li>
+</ul>
 </div>
 </div>
-
-<div id="outline-container-sec-2" class="outline-2">
-<h2 id="sec-2"><span class="section-number-2">2</span> Software development</h2>
-<div class="outline-text-2" id="text-2">
+<div id="outline-container-sec-3" class="outline-2">
+<h2 id="sec-3"><a id="ID-08f71987-90af-40dc-bb65-bac87db9e652" name="ID-08f71987-90af-40dc-bb65-bac87db9e652"></a><span class="section-number-2">3</span> Instructions to embed Sixth-3D in your project</h2>
+<div class="outline-text-2" id="text-3">
 <p>
-Instructions to embed Sixth-3D in your project as a library. Maven *pom.xml*
-file snippet:
+Maven *pom.xml* file snippet:
 </p>
 <div class="org-src-container">
 
-<pre class="src src-xml">&lt;<span style="color: #A6E22E;">dependencies</span>&gt;
+<pre class="src src-xml">&lt;dependencies&gt;
     ...
-    &lt;<span style="color: #A6E22E;">dependency</span>&gt;
-        &lt;<span style="color: #A6E22E;">groupId</span>&gt;eu.svjatoslav&lt;/<span style="color: #A6E22E;">groupId</span>&gt;
-        &lt;<span style="color: #A6E22E;">artifactId</span>&gt;sixth-3d&lt;/<span style="color: #A6E22E;">artifactId</span>&gt;
-        &lt;<span style="color: #A6E22E;">version</span>&gt;1.0&lt;/<span style="color: #A6E22E;">version</span>&gt;
-    &lt;/<span style="color: #A6E22E;">dependency</span>&gt;
+    &lt;dependency&gt;
+        &lt;groupId&gt;eu.svjatoslav&lt;/groupId&gt;
+        &lt;artifactId&gt;sixth-3d&lt;/artifactId&gt;
+        &lt;version&gt;1.1&lt;/version&gt;
+    &lt;/dependency&gt;
     ...
-&lt;/<span style="color: #A6E22E;">dependencies</span>&gt;
+&lt;/dependencies&gt;
 
-&lt;<span style="color: #A6E22E;">repositories</span>&gt;
+&lt;repositories&gt;
     ...
-    &lt;<span style="color: #A6E22E;">repository</span>&gt;
-        &lt;<span style="color: #A6E22E;">id</span>&gt;svjatoslav.eu&lt;/<span style="color: #A6E22E;">id</span>&gt;
-        &lt;<span style="color: #A6E22E;">name</span>&gt;Svjatoslav repository&lt;/<span style="color: #A6E22E;">name</span>&gt;
-        &lt;<span style="color: #A6E22E;">url</span>&gt;http://www2.svjatoslav.eu/maven/&lt;/<span style="color: #A6E22E;">url</span>&gt;
-    &lt;/<span style="color: #A6E22E;">repository</span>&gt;
+    &lt;repository&gt;
+        &lt;id&gt;svjatoslav.eu&lt;/id&gt;
+        &lt;name&gt;Svjatoslav repository&lt;/name&gt;
+        &lt;url&gt;http://www2.svjatoslav.eu/maven/&lt;/url&gt;
+    &lt;/repository&gt;
     ...
-&lt;/<span style="color: #A6E22E;">repositories</span>&gt;
+&lt;/repositories&gt;
 </pre>
 </div>
 
 <p>
-See <a href="codeGraph/index.html">generated code graph</a> using <a href="http://www2.svjatoslav.eu/gitbrowse/javainspect/doc/index.html">this tool</a>.
+For API usage examples, see <a href="https://www3.svjatoslav.eu/projects/sixth-3d-demos/">demos</a>.
 </p>
 </div>
 </div>
+<div id="outline-container-sec-4" class="outline-2">
+<h2 id="sec-4"><span class="section-number-2">4</span> <span class="label label-primary TODO">TODO</span> features to add</h2>
+<div class="outline-text-2" id="text-4">
+<ul class="org-ul">
+<li>Partial region/frame repaint: when only one small object changed on
+the scene, it would be faster to re-render that specific area.
+</li>
+
+<li>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.
+</li>
+
+<li>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.
+</li>
+
+<li>Render only visible polygons.
+<ul class="org-ul">
+<li>This would significantly reduce RAM &lt;-&gt; CPU traffic.
+</li>
+
+<li>General algorithm description:
+<ul class="org-ul">
+<li>For each horizontal scanline:
+<ul class="org-ul">
+<li>sort polygon edges from left to right
+</li>
+<li>while iterating and drawing pixels over screen X axis (left to
+right) track next appearing/disappearing polygons.
+<ul class="org-ul">
+<li>For each polygon edge update Z sorted active polygons list.
+</li>
+<li>Only draw pixel from the top-most polygon.
+<ul class="org-ul">
+<li>Only if polygon area is transparent/half-transparent add
+colors from the polygons below.
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+
+<li>As a bonus, this would allow to track which polygons are really
+visible in the final scene for each frame.
+
+<ul class="org-ul">
+<li>Such information allows further optimizations:
+
+<ul class="org-ul">
+<li>Dynamic geometry simplification:
+<ul class="org-ul">
+<li>Dynamically detect and replace invisible objects from the
+scene with simplified bounding box.
+</li>
+
+<li>Dynamically replace boudnig box with actual object once it
+becomes visible.
+</li>
+</ul>
+</li>
+
+<li>Dynamically unload unused textures from RAM.
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
 </div><div class="col-md-3"><nav id="table-of-contents">
 <div id="text-table-of-contents" class="bs-docs-sidebar">
 <ul class="nav">
-<li><a href="#sec-1">1. Project description</a></li>
-<li><a href="#sec-2">2. Software development</a></li>
+<li><a href="#sec-1">1. Project description</a>
+<ul class="nav">
+<li><a href="#sec-1-1">1.1. Justification for software rendering</a></li>
+<li><a href="#sec-1-2">1.2. Justification for Java</a></li>
+</ul>
+</li>
+<li><a href="#sec-2">2. API documentation</a></li>
+<li><a href="#sec-3">3. Instructions to embed Sixth-3D in your project</a></li>
+<li><a href="#sec-4">4. features to add</a></li>
 </ul>
 </div>
 </nav>
 </div></div></div>
 <footer id="postamble" class="">
 <div><p class="author">Author: Svjatoslav Agejenko</p>
-<p class="date">Created: 2017-01-22 Sun 23:18</p>
-<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 24.4.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
+<p class="date">Created: 2019-01-19 Sat 00:51</p>
+<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 26.1 (<a href="http://orgmode.org">Org-mode</a> 9.1.9)</p>
 </div>
 </footer>
 </body>