Sixth 3D - 3D engine
+Sixth 3D - 3D engine
+Table of Contents
+ +1 General
+1. General
-
-
- This is a subproject of Sixth - - -
- This program is free software: you can redistribute it and/or modify -it under the terms of the 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. - +
- This program is free software: released under Creative Commons Zero +(CC0) license
- Program author:
-
-
- Svjatoslav Agejenko - -
- Homepage: https://svjatoslav.eu - -
- Email: mailto://svjatoslav@svjatoslav.eu - -
+ - Svjatoslav Agejenko +
- Homepage: https://svjatoslav.eu +
- Email: mailto://svjatoslav@svjatoslav.eu +
1.1 Source code
+1.1. Source code
-
-
- Download latest snapshot in TAR GZ format - +
- Download latest snapshot in TAR GZ format -
- Browse Git repository online - +
- Browse Git repository online -
- Clone Git repository using command: +
+Clone Git repository using command: +
git clone https://www2.svjatoslav.eu/git/sixth-3d.git +
-
-
-
-- See JavaDoc. - +
- See JavaDoc.
2 Project description
+2. 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 for project Sixth.
-Sixth 3D can be also used as standalone 3D engine in your project. +Sixth 3D can be also used as standalone 3D engine in your project.
2.1 Justification for software rendering
+2.1. Justification for software rendering
3D rendering is done in software, 100% pure Java on CPU. At least for @@ -291,61 +310,47 @@ pixel.
2.2 Justification for Java
+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. - +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).
+
-
-
- requirement for decent GPU - -
- GPU missing features - -
- GPU missing/incomplete/buggy drivers - -
- OpenGL specification - -
-
-
- Java virtual machine just-in-time compiler. - -
- Growing CPU cores count. - -
3 API documentation
+3. API documentation
@@ -357,27 +362,24 @@ on documentation. 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 - +
- 3D engine (generated code graphs (generated using JavaInspect)) +
- For API usage examples, see demos
4 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.1</version> + <version>1.2</version> </dependency> ... </dependencies> @@ -387,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> @@ -399,57 +401,50 @@ For API usage examples, see -5 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 -
+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:
+colors from the polygons below. +-
- 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. -
-As a bonus, this would allow to track which polygons are really visible in the final scene for each frame. @@ -461,52 +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
+ +