X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=doc%2Findex.html;h=e49cd2a46edaa9cacf3a84c2c4a15f1ab2466173;hb=HEAD;hp=68618001fefb7f826ee0391a0155fc49564eb546;hpb=2e78e3bdbfe899e9b19211715adea4604b169945;p=sixth-3d.git diff --git a/doc/index.html b/doc/index.html index 6861800..e49cd2a 100644 --- a/doc/index.html +++ b/doc/index.html @@ -1,251 +1,296 @@ - - + + + + + + Sixth 3D - 3D engine - - - - - - - -" - - - + + + + + -
-

Sixth 3D - 3D engine

-
-
-
  • other applications hosted at svjatoslav.eu -
  • +
    +

    1.1. Source code

    +
    + +
    +
    +
    -
    -

    1 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. +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.

    -
    -

    1.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 now. Modern CPU cores count keeps growing and therefore rendering by @@ -265,155 +310,141 @@ pixel.

    -
    -

    1.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). +
  • 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.
    -
    -

    2 TODO API documentation

    -
    +
    +

    3. API documentation

    +
    + +

    -Documentation currently missing for the lack of time. +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:

    -
    -

    3 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>
    +
    <dependencies>
         ...
    -    <dependency>
    -        <groupId>eu.svjatoslav</groupId>
    -        <artifactId>sixth-3d</artifactId>
    -        <version>1.1</version>
    -    </dependency>
    +    <dependency>
    +        <groupId>eu.svjatoslav</groupId>
    +        <artifactId>sixth-3d</artifactId>
    +        <version>1.2</version>
    +    </dependency>
         ...
    -</dependencies>
    +</dependencies>
     
    -<repositories>
    +<repositories>
         ...
    -    <repository>
    -        <id>svjatoslav.eu</id>
    -        <name>Svjatoslav repository</name>
    -        <url>http://www2.svjatoslav.eu/maven/</url>
    -    </repository>
    +    <repository>
    +        <id>svjatoslav.eu</id>
    +        <name>Svjatoslav repository</name>
    +        <url>http://www3.svjatoslav.eu/maven/</url>
    +    </repository>
         ...
    -</repositories>
    +</repositories>
     

    -For API usage examples, see demos. +For API usage examples, see demos.

    -
    -

    4 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. +
    + + +
  • As a bonus, this would allow to track which polygons are really visible in the final scene for each frame. @@ -425,47 +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.
  • + +
    -
    -
    -

    Author: Svjatoslav Agejenko

    -

    Created: 2017-11-29 Wed 23:56

    -

    Emacs 25.1.1 (Org-mode 8.2.10)

    -
    +
    +

    Author: Svjatoslav Agejenko

    +

    Created: 2024-04-25 Thu 17:15

    +

    Validate

    +