Sixth 3D - 3D engine
--
-
-
- This is a subproject of Sixth
++
Sixth 3D - 3D engine
+++ +Table of Contents
+++-
+
- 1. General + - -
- download latest snapshot +
- 2. Project description + - -
- This program is free software; you can redistribute it and/or modify it under -the terms of version 3 of the GNU Lesser General Public License or later as -published by the Free Software Foundation. +
- 3. API documentation +
- 4. Instructions to embed Sixth-3D in your project +
- 5. TODO features to add + +
++ +1. General
++--
+
- This program is free software: released under Creative Commons Zero +(CC0) license
- Program author:
-
-
- Svjatoslav Agejenko - -
- Homepage: http://svjatoslav.eu - -
- Email: mailto://svjatoslav@svjatoslav.eu - +
- Svjatoslav Agejenko +
- Homepage: https://svjatoslav.eu +
- Email: mailto://svjatoslav@svjatoslav.eu +
+
+ - Other software projects hosted at svjatoslav.eu
- other applications hosted at svjatoslav.eu -
+++1.1. Source code
+++-
+
- Download latest snapshot in TAR GZ format + +
- Browse Git repository online + +
+Clone Git repository using command: +
++git clone https://www2.svjatoslav.eu/git/sixth-3d.git +
+
+- See JavaDoc. +
+2. Project description
++ ---1 Project description
--In-software, pure Java realtime 3D rendering engine. With the final +In software, 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 project Sixth.
--
-
- See: demos of current 3D engine capabilities - -
+Sixth 3D can be also used as standalone 3D engine in your project. +
+++2.1. Justification for software 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. +
-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.
+++2.2. Justification for Java
+-
-
- It is easy to refactor and experiment with. - +
- 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). - -
+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 - -
- 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. - -
- 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. -
+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. -
++- - -3. API documentation
++-
+
- See JavaDoc. +
-Pure Java also means easy portability and installation. No need to -deal with platform specific dependencies. +Note: due to a lack of time, there is still big room for improvement +on documentation.
-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:
+-
+
- 3D engine (generated code graphs (generated using JavaInspect)) +
- For API usage examples, see demos +
-2 Instructions to embed Sixth-3D in your project
-++-4. Instructions to embed Sixth-3D in your project
+-Maven *pom.xml* file snippet: +Maven pom.xml file snippet:
-<dependencies> ... <dependency> <groupId>eu.svjatoslav</groupId> <artifactId>sixth-3d</artifactId> - <version>1.0</version> + <version>1.2</version> </dependency> ... </dependencies> @@ -329,7 +389,7 @@ Maven *pom.xml* file snippet: <repository> <id>svjatoslav.eu</id> <name>Svjatoslav repository</name> - <url>http://www2.svjatoslav.eu/maven/</url> + <url>http://www3.svjatoslav.eu/maven/</url> </repository> ... </repositories> @@ -337,57 +397,54 @@ Maven *pom.xml* file snippet:
-See generated code graph using this tool. +For API usage examples, see demos.
-- +3 TODO features to add
-++5. 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. - +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. - +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. +before animations become still and waiting for user input starts. +
+-5.1. Render only visible polygons
+-
-
- This would significantly reduce RAM <-> CPU traffic. - +
- This would significantly reduce RAM <-> CPU traffic.
- General algorithm description:
- For each horizontal scanline:
-
-
- sort polygon edges from left to right - +
- 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. - +
- 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. - -
-
-
-
+colors from the polygons below.
+ - For each horizontal scanline:
- As a bonus, this would allow to track which polygons are really visible in the final scene for each frame. @@ -399,41 +456,24 @@ visible in the final scene for each frame.
- Dynamic geometry simplification:
- Dynamically detect and replace invisible objects from the -scene with simplified bounding box. - +scene with simplified bounding box.
- Dynamically replace boudnig box with actual object once it -becomes visible. -
- - +becomes visible. + -- Dynamically unload unused textures from RAM. -
- - - - - - +- Dynamically unload unused textures from RAM.
+ +-++Created: 2022-07-13 Wed 04:16
+ +