Commit f38017ec by Werner Westerkamp

Kapitel 4 - redaktionell

parent 9b2adcd3
Pipeline #332 passed with stage
in 52 seconds
...@@ -25,7 +25,7 @@ Als Basis der 3D Tiles wird JSON formatiertes Tileset verwendet, das auf die eig ...@@ -25,7 +25,7 @@ Als Basis der 3D Tiles wird JSON formatiertes Tileset verwendet, das auf die eig
Das Tileset hat eine baumartige Struktur aus Tiles und deren Metadaten. Das Tileset hat eine baumartige Struktur aus Tiles und deren Metadaten.
Jedes Tile hat hierbei ein 3D Volumen, das den geografischen Bereich beschreibt und einen geometrischen Fehler zur Echtwelt. Jedes Tile hat hierbei ein 3D Volumen, das den geografischen Bereich beschreibt und einen geometrischen Fehler zur Echtwelt.
Außerdem können Kinder und deren Transformationen zu dem Elternteil angegeben werden. % @@@ Elterntile oder Elternteil? Außerdem können Kinder und deren Transformationen zu dem Elternteil angegeben werden. % @@@ Elterntile oder Elternteil?
Alle Kinder liegen hierbei in dem Volumen des Elternknotens und können mit verschiedenen Datenstrukturen, wie K-D Bäumen Quadtrees oder ähnlichem die Region genauer spezifizieren (sieh Bild \ref{img:nonunifomQuad}. Alle Kinder liegen hierbei in dem Volumen des Elternknotens und können mit verschiedenen Datenstrukturen, wie K-D Bäumen Quadtrees oder ähnlichem die Region genauer spezifizieren (siehe Bild \ref{img:nonunifomQuad}.
Hierbei können die Kinder das Elterntile ersetzen (replace, z.B. ein genaueres Mesh) oder das bestehende Tile ergänzen (refine, zusätzliche Gebäude oder Details). Hierbei können die Kinder das Elterntile ersetzen (replace, z.B. ein genaueres Mesh) oder das bestehende Tile ergänzen (refine, zusätzliche Gebäude oder Details).
Die eigentlichen Daten der Tiles sind durch eine URL verlinkt und können dynamisch nachgeladen werden. Die eigentlichen Daten der Tiles sind durch eine URL verlinkt und können dynamisch nachgeladen werden.
...@@ -41,7 +41,7 @@ Die eigentlichen Daten der Tiles sind durch eine URL verlinkt und können dynami ...@@ -41,7 +41,7 @@ Die eigentlichen Daten der Tiles sind durch eine URL verlinkt und können dynami
Tiles können in unterschiedlichen Formaten sein, zum Beispiel: Tiles können in unterschiedlichen Formaten sein, zum Beispiel:
\begin{description} \begin{description}
\item[ Batched3D Model] \item[ Batched3D Model]
3D Daten, die als glTF übertragen werden. Zusätzlich können pro Modell Metadaten für das Visualisieren enthalten sein. 3D Daten, die als glTF übertragen werden. Zusätzlich können pro Modell Metadaten zum Visualisieren enthalten sein.
\item[ Instanced3D Model] \item[ Instanced3D Model]
Tileformat für Instancing. Die Geometrie wird als glTF übertragen und zusätzlich eine Liste aus Positionen an denen die Objekte instanziiert werden sollen. Tileformat für Instancing. Die Geometrie wird als glTF übertragen und zusätzlich eine Liste aus Positionen an denen die Objekte instanziiert werden sollen.
Das kann zum Beispiel für Bäume genutzt werden. Das kann zum Beispiel für Bäume genutzt werden.
...@@ -57,28 +57,28 @@ Tileformat zum gleichzeitigen Übertragen mehrerer einzelner Tileformate in eine ...@@ -57,28 +57,28 @@ Tileformat zum gleichzeitigen Übertragen mehrerer einzelner Tileformate in eine
\subsection{glTF} \subsection{glTF}
Das GL Transmission Format (glTF \cite{GLTF}) ist ein Format zum effizienten Übertragen von 3D Szenen für Gl Api's wie WebGL, OpenGl ES und OpenGL wird hier nur Kurz erwähnt da es für die Implementierung nicht verwendet wurde. Das GL Transmission Format (glTF \cite{GLTF}) ist ein Format zum effizienten Übertragen von 3D Szenen für Gl Api's wie WebGL. OpenGl ES und OpenGL wird hier nur kurz erwähnt, da es für die Implementierung nicht verwendet wurde.
glTF dient als effizientes, einheitliches und erweiterbares Format zur Übertragung und Laden von 3D Daten. glTF dient als effizientes, einheitliches und erweiterbares Format zur Übertragung und Laden von 3D Daten.
Im Vergleich zu aktuellen Standards wie COLADA ist glTF optimiert, schnell übertragen und kann schnell in eine Applikation geladen werden. Im Vergleich zu aktuellen Standards wie COLADA ist glTF optimiert, schnell übertragen und kann schnell in eine Applikation geladen werden.
In einem JSON formatierten Datei (.gltf) wird eine komplette Szene samt Szenegraf, Materialien und deren zugehörigen Shadern, Kamerapositionen, Animationen und Skinning Informationen übertragen. In einer JSON formatierten Datei (.gltf) wird eine komplette Szene samt Szenengraf, Materialien und deren zugehörigen Shadern, Kamerapositionen, Animationen und Skinning Informationen übertragen.
Dabei kann auf externe Dateien verwiesen werden. Diese sind zum Beispiel Binärdaten oder Bildern die für das einfache und effiziente Übertragen von Geometrie, Texturen oder den nötigen GLSL Shadern genutzt werden Dabei kann auf externe Dateien verwiesen werden. Diese sind zum Beispiel Binärdaten oder Bilder, die für das einfache und effiziente Übertragen von Geometrie, Texturen oder den nötigen GLSL Shadern genutzt werden.
\subsection{Struktur} \subsection{Struktur}
Die .gltf Datei ist eine JSON formatiert und bildet den Kern jedes Modells. Die .gltf Datei ist JSON formatiert und bildet den Kern jedes Modells.
In Ihr werden alle grundlegenden Informationen wie zum Beispiel die Baumstruktur des Szenengrafen und die Materialien gespeichert (siehe Abb. \ref{img:glTFOverview}). In ihr werden alle grundlegenden Informationen wie zum Beispiel die Baumstruktur des Szenengrafen und die Materialien gespeichert (siehe Abb. \ref{img:glTFOverview}).
Eine Szene bildet hierbei den Startpunkt für die zu rendernde Geometrie. Eine Szene bildet hierbei den Startpunkt für die zu rendernde Geometrie.
Szenen bestehen aus Knoten (Nodes), die beliebig viele Knoten als Kinder haben können. Szenen bestehen aus Knoten (Nodes), die beliebig viele Knoten als Kinder haben können.
Jeder Knoten kann eine Transformation im lokalen Raum definieren, bestehend aus eine Translation, einer Rotation und eine Skalierung. Jeder Knoten kann eine Transformation im lokalen Raum definieren, bestehend aus einer Translation, einer Rotation und einer Skalierung.
Jeder Knoten kann eine Mesh und damit die eigentliche Geometrie referenzieren. Jeder Knoten kann eine Mesh und damit die eigentliche Geometrie referenzieren.
Diese Geometrie wird in Buffern als Binärdaten gespeichert. Diese sind entweder als Base64 String direkt im JSON oder als zusätzliche Binärdatei gespeichert. Diese Geometrie wird in Buffern als Binärdaten gespeichert. Diese sind entweder als Base64 String direkt im JSON oder als zusätzliche Binärdatei gespeichert.
Auf einen Buffer wird mit einem Asccessor und einer Bufferview zugegriffen. In diesen ist spezifiziert in welchem Format die Daten vorliegen (z.B. ein Array aus 2D Vektoren (VEC2) aus UNSIGNED SHORT). Auf einen Buffer wird mit einem Accessor und einer Bufferview zugegriffen. In diesen ist spezifiziert, in welchem Format die Daten vorliegen (z.B. ein Array aus 2D Vektoren (VEC2) aus UNSIGNED SHORT).
Alle Datenformate entsprechen Formaten die in OpenGL vorliegen, sodass die Daten ohne Konvertierung in OpenGL Vertex Array Objetkts (VAO), bzw. Vertex Buffer Objekts (VBO) umgewandelt werden können. Alle Datenformate entsprechen Formaten, die in OpenGL vorliegen, sodass die Daten ohne Konvertierung in OpenGL Vertex Array Objetkts (VAO), bzw. Vertex Buffer Objekts (VBO) umgewandelt werden können.
Jedes Mesh kann auf ein Material referenzieren. Materialien bestehen aus einem Materialparametern, Texturen und einer Techniken. Jedes Mesh kann auf ein Material referenzieren. Materialien bestehen aus Materialparametern, Texturen und Techniken.
Techniken bestehen hauptsächlich aus einem GLSL Shader Programm das ebenfalls im glTF mitgeliefert wird. Techniken bestehen hauptsächlich aus einem GLSL Shader Programm, das ebenfalls im glTF mitgeliefert wird.
Außerdem wird spezifiziert wie die VAO und VBO aus dem Mesh bei dem Rendervorgang an den Shader gebunden werden müssen. Außerdem wird spezifiziert, wie die VAO und VBO aus dem Mesh bei dem Rendervorgang an den Shader gebunden werden müssen.
Ein weiteres Feature von glTF Datein ist die Möglichkeit Animationen und Skinning Informationen zu übertragen. Ein weiteres Feature von glTF Datein ist die Möglichkeit, Animationen und Skinning Informationen zu übertragen.
\begin{figure} \begin{figure}
\begin{center} \begin{center}
...@@ -91,25 +91,25 @@ Ein weiteres Feature von glTF Datein ist die Möglichkeit Animationen und Skinni ...@@ -91,25 +91,25 @@ Ein weiteres Feature von glTF Datein ist die Möglichkeit Animationen und Skinni
\subsubsection{Buffers and Accessors} \subsubsection{Buffers and Accessors}
Buffer sind die eigentlichen Daten in einem Binären Block. Buffer sind die eigentlichen Daten in einem Binären Block.
Diese können entweder als externe Datei (.bin) oder als BASE64 encodierter String in der JSON Datei angefügt werden. Diese können entweder als externe Datei (.bin) oder als BASE64 encodierter String in der JSON Datei angefügt werden.
Die Hauptaufgabe der Buffer ist es große mengen an Daten wie die Geometrie effizient zu übertragen. Die Hauptaufgabe der Buffer ist es, große Mengen an Daten wie die Geometrie effizient zu übertragen.
%glf right Handed y Axis up in Meters and radians %glf right Handed y Axis up in Meters and radians
\section{Umsetzung} \section{Umsetzung}
Für das Speichern der Punktwolke wurden keine LOD verfahren angewendet. Für das Speichern der Punktwolke wurden keine LOD Verfahren angewendet.
In der Praxis hat sich gezeigt das die Wolken klein genug sind, sodass sie als ganzes effizient gerendert werden konnten. In der Praxis hat sich gezeigt, dass die Wolken klein genug sind, sodass sie als ganzes effizient gerendert werden konnten.
Sollte man größere Punktwolken, z.B. von einem ganzen Raum erstellen könnte das Performancevorteile beim visualisieren bringen. Sollte man größere Punktwolken, z.B. von einem ganzen Raum erstellen, könnte das Performancevorteile beim Visualisieren bringen.
Das verwendete Tileset ist statisch und sehr einfach gehalten (siehe Anhang \ref{Anhang:Tileset}) Das verwendete Tileset ist statisch und sehr einfach gehalten (siehe Anhang \ref{Anhang:Tileset})
Es beinhaltet ein Tile das auf die Punktwolke referenziert. Es ist nicht transformiert und hat ein statisches Boundigvolume eine 5m große Kugel. Es beinhaltet ein Tile, das auf die Punktwolke referenziert. Es ist nicht transformiert und hat ein statisches Boundigvolume eine 5m große Kugel.
Die eigentlichen Daten werden in einem Point Cloud Tile abgespeichert. Die eigentlichen Daten werden in einem Point Cloud Tile abgespeichert.
Die Positionsdaten der einzelnen Punkte wird als Array aus float abgespeichert. Die Positionsdaten der einzelnen Punkte werden als Array aus float abgespeichert.
Dabei bilden 3 floats immer die x,y,und z Koordinaten eines Punktes. Dabei bilden 3 floats immer die x,y,und z Koordinaten eines Punktes.
Zusätzlich speichern wir einen Array an Farbdaten. Zusätzlich speichern wir einen Array an Farbdaten.
Pro Punkt wird jeweils ein Byte pro RGB gespeichert. Pro Punkt wird jeweils ein Byte pro RGB gespeichert.
Um das Kalibriern zwischen der Echtwelt zu vereinfachen wurde beim aufnehmen ein Vive Tracker in der Welt platziert und als Ursprung verwendet. Um das Kalibriern zwischen der Echtwelt zu vereinfachen, wurde beim Aufnehmen ein Vive Tracker in der Welt platziert und als Ursprung verwendet.
Alle Punkte wurden vor dem schreiben der Datei in das lokale Koordinatensystem des Trackers transformiert und können beim visualisieren erneut an dem Tracker orientiert werden. Alle Punkte wurden vor dem Schreiben der Datei in das lokale Koordinatensystem des Trackers transformiert und können beim Visualisieren erneut an dem Tracker orientiert werden.
\begin{equation} \begin{equation}
\begin{split} \begin{split}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment