This commit is contained in:
2023-05-02 23:55:48 +02:00
parent eb3afbee34
commit fcc78d0c77
13 changed files with 119 additions and 78 deletions
+2 -2
View File
@@ -1,9 +1,9 @@
A 3D streaming system is a system that progressively collects 3D data.
The previous chapter voluntarily remained vague about what \emph{3D data} actually are.
The previous chapter voluntarily remained vague about what _3D data_ actually are.
This chapter presents in detail the 3D data we consider and how they are rendered.
We also give insights about interaction and streaming by comparing the 3D setting to the video one.
== What is a 3D model?
== What is a 3D model?<f:3d>
The 3D models we are interested in are sets of textured meshes, which can potentially be arranged in a scene graph.
Such models can typically contain the following:
+6 -6
View File
@@ -8,7 +8,7 @@ When it comes to 3D streaming systems, we need two kind of software.
=== JavaScript
#heading(level: 4, numbering: none)[THREE.js]
==== THREE.js
On the web browser, it is now possible to perform 3D rendering by using WebGL.
However, WebGL is very low level and it can be painful to write code, even to render a simple triangle.
@@ -37,7 +37,7 @@ A snippet of the basic usage of these classes is given in @three-hello-world.
caption: [A THREE.js _hello world_]
)<three-hello-world>
#heading(level: 4, numbering: none)[Geometries]
==== Geometries
Geometries are the classes that hold the vertices, texture coordinates, normals and faces.
THREE.js proposes two classes for handling geometries:
@@ -49,7 +49,7 @@ THREE.js proposes two classes for handling geometries:
In this section, we explain the specificities of Rust and why it is an adequate language for writing efficient native software safely.
#heading(level: 4, numbering: none)[Borrow checker]
==== Borrow checker
Rust is a system programming language focused on safety.
It is made to be efficient (and effectively has performances comparable to C // TODO \footnote{\url{https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html}} or C++\footnote{\url{https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-gpp.html}})
@@ -142,7 +142,7 @@ The borrow checker may seem like an enemy to newcomers because it often rejects
It is probably for those reasons that Rust is the _most loved programming language_ according to the Stack Overflow
Developer Survey // TODO in~\citeyear{so-survey-2016}, \citeyear{so-survey-2017}, \citeyear{so-survey-2018} and~\citeyear{so-survey-2019}.
#heading(level: 4, numbering: none)[Tooling]
==== Tooling
Moreover, Rust comes with many programs that help developers.
- #link("https://github.com/rust-lang/rust")[*`rustc`*] is the Rust compiler. It is comfortable due to the clarity and precise explanations of its error messages.
@@ -152,7 +152,7 @@ Moreover, Rust comes with many programs that help developers.
- #link("https://github.com/rust-lang/rustfmt")[*`rustfmt`*] auto formats code.
- #link("https://github.com/rust-lang/rust-clippy")[*`clippy`*] is a linter that detects unidiomatic code and suggests modifications.
#heading(level: 4, numbering: none)[Glium]
==== Glium
When we need to perform rendering for 3D content analysis or for evaluation, we use the #link("https://github.com/glium/glium")[*`glium`*] library.
Glium has many advantages over using raw OpenGL calls.
@@ -163,7 +163,7 @@ Its objectives are:
- to be fast: the binary produced use optimized OpenGL functions calls;
- to be compatible: glium seeks to support the latest versions of OpenGL functions and falls back to older functions if the most recent ones are not supported on the device.
#heading(level: 4, numbering: none)[Conclusion]
==== Conclusion
In our work, many tasks will consist in 3D content analysis, reorganization, rendering and evaluation.
Many of these tasks require long computations, lasting from hours to entire days.