Prefer HTTPS in documentation
[sixth-3d-demos.git] / doc / index.org
index ad3fe89..b255c4e 100644 (file)
 #+TITLE: Sixth 3D engine demos
 
------
-- This is a subproject of [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/index.html][Sixth 3D]]
-- [[http://www2.svjatoslav.eu/gitweb/?p=sixth.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.
+* (document settings) :noexport:
+** use dark style for TWBS-HTML exporter
+#+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>
+
+* General
+- This is a subproject of [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D]] which in turn is a subproject of
+  [[https://www3.svjatoslav.eu/projects/sixth/][Sixth]].
+
+- 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: http://svjatoslav.eu
+  - Homepage: https://svjatoslav.eu
   - Email: mailto://svjatoslav@svjatoslav.eu
 
-- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]]
-
-
-* Current status
-[[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/screenshots/index.html][http://www2.svjatoslav.eu/gitbrowse/sixth/doc/screenshots.png]]
-
-
-Sample scenes rendered at interactive framerates by Sixth 3D engine.
-
-
-Sixth is presently in research / prototyping and ideas collecting
-phase. Some working parts are already implemented, and can be run as a
-demo or as a library in other projects, if you are computer
-programmer. System is far from being useful for non programmers (Pre
-alpha).
-
-
-Implemented and working features:
-- First layer of storage: Simple persistent key-value map.
-- In software, pure Java realtime 3D rendering engine.
-
-
-[[http://www2.svjatoslav.eu/gitbrowse/sixth/doc/applet.html][Run Sixth 3D/GUI demos as Java applet]]
-
-
-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.
-
-** 3D rendering
-
-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.
-
-* Vision
-- Human computer symbiosis to unleash full potential of human mind and
-  computer.
-- A tool to amplify human ability.
-
-** Key ideas from user perspective
-- Helps/assists in understanding, discovering, learning and creating
-  things by being very visual and interactive. (I think of
-  problems/solutions visually and I want user interface/experience to
-  reflect that)
-
-- Properly visualizes and immerses user in completely various forms of
-  information and provides intuitive and powerful ways to explore,
-  interact and manipulate it with fast feedback loop to immediately
-  see results.
-
-- I like this quote:
-#+BEGIN_QUOTE
-“Virtual reality holds the key to the evolution of the human mind”
-Dr. Lawrence Angelo, The Lawnmower Man (1992)
-#+END_QUOTE
-
-** Key technical ideas
-System should make use of distributed computing like SSI or/and Hadoop
-for greater performance and reliability.
-
-System should use some overlay network to enable secure and reliable
-and easy to use communication between any process on any networked
-computer as well as human to human communication.
-* Software development
-Instructions to embed Sixth in your project as a library. Maven
-*pom.xml* file snippet:
-#+BEGIN_SRC xml
-<dependencies>
-    ...
-    <dependency>
-        <groupId>eu.svjatoslav</groupId>
-        <artifactId>sixth</artifactId>
-        <version>1.2</version>
-    </dependency>
-    ...
-</dependencies>
-
-<repositories>
-    ...
-    <repository>
-        <id>svjatoslav.eu</id>
-        <name>Svjatoslav repository</name>
-        <url>http://www2.svjatoslav.eu/maven/</url>
-    </repository>
-    ...
-</repositories>
-#+END_SRC
-
-[[http://www2.svjatoslav.eu/projects/sixth/codegraphs/][Auto-generated graphs for parts of Sixth code/architecture]] using [[http://www2.svjatoslav.eu/gitbrowse/javainspect/doc/index.html][this
-tool]]
-
-* Ideas to possibly consider/incorporate in the future
-
-- Semantic networks / knowledge trees.
-    - Is able to use natural language for knowledge mining and
-      question answering. This could potentially lead to self aware
-      artificial intelligence. Because of [[http://en.wikipedia.org/wiki/Three_Laws_of_Robotics]["Three laws safe"]] design,
-      there is nothing that can go wrong.
-
-- Become an alternative to or an integrated part of KDE, Gnome,
-  Canonical Unity or similar desktop user interfaces.
-
-- Become an open source scientific computing engine of structured data
-  as an alternative to proprietary Wolfram Alpha.
-
-- Become an open source solution for unstructured knowledge extraction
-  and processing, similar to IBM Watson.
-
-- P2P (Peer to peer) capabilities:
-    - File/data sharing system.
-    - Data streaming system.
-    - Distributed backup system.
-    - Distributed computation system.
-    - Communication system.
-    - Possibility of completely decentralized and stealth mode of operation for information publishing, storage and distribution, similar to Freenet.
+- [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]]
+
+** Source code
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d-demos.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]]
+
+- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d-demos.git;a=summary][Browse Git repository online]]
+
+- Clone Git repository using command:
+  : git clone https://www2.svjatoslav.eu/git/sixth-3d-demos.git
+
+* Overview
+Goal of this project is to show off capabilities and API usage of
+[[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D]] engine.
+
+All sample scenes below are rendered at interactive framerates.
+* Navigating in space
+| key                            | result                               |
+|--------------------------------+--------------------------------------|
+| cursor keys                    | move: left, right, forward, backward |
+| mouse scroll wheel             | move: up, down                       |
+| dragging with mouse            | look around                          |
+
+* Samples
+** Raytracing through voxels
+[[file:screenshots/raytracing fractal in voxel polygon hybrid scene.png]]
+
+Test scene that is generated simultaneously using:
++ conventional polygons
+  + for realtime navigation, and
++ voxels
+  + for on-demand raytracing
+
+Instead of storing voxels in dumb [X * Y * Z] array, dynamically
+partitioned [[https://en.wikipedia.org/wiki/Octree][octree]] is used to compress data. Press "r" key anywhere in
+the scene to raytrace current view through compressed voxel
+datastructure.
+
+** Conway's Game of Life
+The Game of Life, also known simply as Life, is a cellular automaton
+devised by the British mathematician John Horton Conway in 1970.
+
++ https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
+  + Game rules:
+    + 2 cell states: alive / dead
+    + Each cell sees 8 neighboring cells.
+    + If alive cell neighbors count is 2 or 3, then cell survives,
+      otherwise it dies.
+    + Dead cell becomes alive if neighbors count is exactly 3.
+
+[[file:screenshots/life.png]]
+
+Current application projects 2D game grid/matrix onto three
+dimensional space. Extra dimension (height) is used to visualize
+history (previous iterations) using glowing dots suspended in space.
+
+Usage:
+| key                            | result                               |
+|--------------------------------+--------------------------------------|
+| mouse click on the cell (cell) | toggles cell state                   |
+| <space>                        | next iteration                       |
+| ENTER                          | next iteeration with the history     |
+| "c"                            | clear the matrix                     |
+
+** Text editors
+[[file:screenshots/text editors.png]]
+
+Initial test for creating user interfaces in 3D and:
++ window focus handling
++ picking objecs using mouse
++ redirecting keyboard input to focused window
+
+
+Window focus acts like a stack.
+
+When window is clicked with the mouse, previously focused window (if
+any) is pushed to the focus stack and new window receives focus. Red
+frame appears around the window to indicate this.
+
+When ESC key is pressed, window focus is returned to previous window
+(if any).
+
+When any window is focused, all keyboard input is redirected to that
+window, including cursor keys. To be able to navigate around the world
+again, window must be unfocused first using ESC key.
+
+
++ TODO:
+  + Improve focus handling:
+    + Perhaps add shortcut to navigate world without exiting entire
+      stack of focus.
+    + Possibility to retain and reuse recently focused elements.
+    + Store user location in the world and view direction with the
+      focused window. So that when returning focus to far away object,
+      user is redirected also to proper location in the world.
+  + Possibility to store recently visited locations in the world and
+    return to them.
+** Mathematical formulas
+[[file:screenshots/mathematical formulas.png]]
+
++ TODO: instead of projecting 2D visualizations onto 3D space,
+  visualize some formula using all 3 dimensions avaliable.
+** Sinus heightmaps and sphere
+[[file:screenshots/sinus heightmaps and sphere.png]]
+
+Simple test scene. Easy to implement and looks nice.