X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=blobdiff_plain;f=doc%2Findex.org;h=b164b18351be795157a6cba27c686ca2c4eb1d68;hp=6d1a89d28549095c207bc7f047316cf6930d7a6b;hb=84d9d8e0f410351bf7938a33472452b799a8dc59;hpb=439e676d68b70ed18dc2ca83c1581d635228a49f diff --git a/doc/index.org b/doc/index.org index 6d1a89d..b164b18 100644 --- a/doc/index.org +++ b/doc/index.org @@ -1,68 +1,111 @@ #+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]] - -- 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. - -- Program author: - - Svjatoslav Agejenko - - Homepage: http://svjatoslav.eu - - Email: mailto://svjatoslav@svjatoslav.eu - -- [[http://svjatoslav.eu/programs.jsp][other applications hosted at svjatoslav.eu]] - * (document settings) :noexport: ** use dark style for TWBS-HTML exporter -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: " +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: #+HTML_HEAD: +* General +- This is a subproject of [[https://www3.svjatoslav.eu/projects/sixth/][Sixth]] -* Project description -In software, pure Java realtime 3D rendering engine. With the final goal of -becoming a platform for buildng 3D user interfaces. +- 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. -+ See: [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d-demos/doc/index.html][demos of current 3D engine capabilities]] +- Program author: + - Svjatoslav Agejenko + - Homepage: https://svjatoslav.eu + - Email: mailto://svjatoslav@svjatoslav.eu +- [[https://www.svjatoslav.eu/projects/][Other software projects hosted at svjatoslav.eu]] -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. +** Source code +- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=snapshot;h=HEAD;sf=tgz][Download latest snapshot in TAR GZ format]] -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. +- [[https://www2.svjatoslav.eu/gitweb/?p=sixth-3d.git;a=summary][Browse Git repository online]] -CPU rendering performance is already good enough to implement usable 3D UI at -sufficient detail level, resolution and frame rate. +- Clone Git repository using command: + : git clone https://www2.svjatoslav.eu/git/sixth-3d.git -Pure Java also means easy portability and installation. No need to deal with -platform specific dependencies. +- See [[https://www3.svjatoslav.eu/projects/sixth-3d/apidocs/][JavaDoc]]. -Also CPU rendering allows to easily test different rendering algorithms and -retains complete control of every rendered pixel. +* Project description ++ 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 for [[https://www3.svjatoslav.eu/projects/sixth/][project Sixth]]. + +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. + +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. -* Software development -Instructions to embed Sixth-3D in your project as a library. Maven *pom.xml* -file snippet: +- 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). + +- No limitations imposed by: + - 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. + +- As a result it is easy to run on various hardware platforms and + operating systems. + +* 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 ... eu.svjatoslav sixth-3d - 1.0 + 1.1 ... @@ -78,4 +121,42 @@ file snippet: #+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 ++ Partial region/frame repaint: when only one small object changed on + 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. + ++ 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. + + + 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. + + + Such information allows further optimizations: + + + 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 unload unused textures from RAM.