Octree: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (+ Tutorial Link)
 
(12 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
{{Bildwunsch|Eine Skizze die verdeutlicht wie der Raum in einem Octree eingeteilt wird.}}
 
= Octree =
 
= Octree =
Bei einem Octree geht es um die hierarchische Einteilung einer Szene durch künstlich eingeführte Bereiche. Jeder Ast der baumartigen Struktur eines Octrees ist hierbei ein nach den Weltachsen ausgerichteter Würfel, dessen Raum wiederum durch bis zu 8 gleich große, kleinere Würfel eingeteilt werden kann die dann die Kinder dieses Astes dar stellen. Die Wurzel des Baumes bildet ein Würfel der die gesamte Szene umfasst.
+
Bei einem Octree geht es um die hierarchische Einteilung einer Szene durch künstlich eingeführte Bereiche. Der '''Octree''' ist damit eine mögliche [[Techniken_und_Algorithmen#Raumunterteilungstechniken|Raumunterteilungstechnik]]. Jeder Ast der baumartigen Struktur eines Octrees ist hierbei ein nach den Weltachsen ausgerichteter Würfel, dessen Raum wiederum durch bis zu 8 gleich große, kleinere Würfel eingeteilt werden kann die dann die Kinder dieses Astes dar stellen. Die Wurzel des Baumes bildet ein Würfel der die gesamte Szene umfasst.
  
 
Es gibt einige Abwandlungen bei der Verwendung von Octrees, beispielsweise könnte jeder Raum einen eigenen Octree erhalten, vom Prinzip her arbeiten sie jedoch alle gleich.
 
Es gibt einige Abwandlungen bei der Verwendung von Octrees, beispielsweise könnte jeder Raum einen eigenen Octree erhalten, vom Prinzip her arbeiten sie jedoch alle gleich.
Zeile 6: Zeile 7:
 
Für größere Landschaften eignet sich häufig eine Abwandlung eines Quadtrees (die 2D Variante eines Octrees) besser. Der Octree ist jedoch die allgemeinere Art eine 3D Szene einzuteilen.
 
Für größere Landschaften eignet sich häufig eine Abwandlung eines Quadtrees (die 2D Variante eines Octrees) besser. Der Octree ist jedoch die allgemeinere Art eine 3D Szene einzuteilen.
  
== Hierarchisches einteilen der Szene ==
+
== Hierarchisches Einteilen der Szene ==
 
Um den Octree für eine Szene zu erstellen, muss zuerst die Wurzel - also der Würfel der die Szene umgibt - gefunden werden. Wenn dieser Würfel gefunden wurde, so kann man für jedes Objekt (oder auch auf Dreiecksbasis) prüfen ob es in einen der 8 kleineren Würfel passt. Ist dies der Fall so wird dieses Objekt in diesen Würfel (welcher einen eigenen Ast bildet) verschoben. Die Objekte die nicht eindeutig in einen Würfel passen bleiben in der Wurzel des Baumes. Dieser Vorgang wird üblicherweise so lange rekursiv durchgeführt, bis eine weitere Unterteilung des Baumes nicht mehr sinnvoll wäre (da Beispielsweise zu wenige Objekte in die neuen Äste kämen).
 
Um den Octree für eine Szene zu erstellen, muss zuerst die Wurzel - also der Würfel der die Szene umgibt - gefunden werden. Wenn dieser Würfel gefunden wurde, so kann man für jedes Objekt (oder auch auf Dreiecksbasis) prüfen ob es in einen der 8 kleineren Würfel passt. Ist dies der Fall so wird dieses Objekt in diesen Würfel (welcher einen eigenen Ast bildet) verschoben. Die Objekte die nicht eindeutig in einen Würfel passen bleiben in der Wurzel des Baumes. Dieser Vorgang wird üblicherweise so lange rekursiv durchgeführt, bis eine weitere Unterteilung des Baumes nicht mehr sinnvoll wäre (da Beispielsweise zu wenige Objekte in die neuen Äste kämen).
  
Für statische Teile einer Szene (wo es häufig sinnvoll ist die einzelnen 3ecke in den Octree einzusortieren) können die einzelnen 3ecke auch an den Würfelgrenzen in 2 3ecke getrennt werden, um möglichst wenige 3ecke in den hierarchisch höher gelegenen Knoten zu habe. Um Hier eine brauchbare Abbruchbedienung für das Unterteilen des Baumes zu finden muss man beachten, das man nicht endlos 3ecke teilt. Eine Möglichkeit wäre beispielsweise zuerst nur den Octree zu erstellen, und die 3ecke erst an dem erstellten Octree entsprechend zu teilen.
+
Für statische Teile einer Szene (wo es häufig sinnvoll ist die einzelnen Dreiecke in den Octree einzusortieren) können die einzelnen Dreiecke auch an den Würfelgrenzen in 2 Dreiecke getrennt werden, um möglichst wenige Dreiecke in den hierarchisch höher gelegenen Knoten zu habe. Um hier eine brauchbare Abbruchbedingung für das Unterteilen des Baumes zu finden muss man beachten, das man nicht endlos Dreiecke teilt. Eine Möglichkeit wäre beispielsweise zuerst nur den Octree zu erstellen, und die Dreiecke erst an dem erstellten Octree entsprechend zu teilen.
  
 
== Hierarchische Sichtbarkeitsabfrage am Octree ==
 
== Hierarchische Sichtbarkeitsabfrage am Octree ==
Hier Prüft man angefangen von der Wurzel jeden Knoten des Octrees auf seine Sichtbarkeit. Die 3 Möglichkeiten sind:
+
Hier prüft man angefangen von der Wurzel jeden Knoten des Octrees auf seine Sichtbarkeit. Die 3 Möglichkeiten sind:
*Nicht sichtbar => zeichne weder diesen Knoten noch seine Unterknoten
+
*Nicht sichtbar => Zeichne weder diesen Knoten noch seine Unterknoten
*Komplett sichtbar => zeichne alle Elemente dieses Knoten als auch alle seine Unterknoten
+
*Komplett sichtbar => Zeichne alle Elemente dieses Knotens sowie aller seiner Unterknoten
*Teilweise sichtbar => zeichne alle Elemente dieses Knoten führe jedoch die Überprüfung an den Unterknoten fort
+
*Teilweise sichtbar => Zeichne alle Elemente dieses Knotens, führe jedoch die Überprüfung an den Unterknoten fort
  
 
== Kollisionsabfrage am Octree ==
 
== Kollisionsabfrage am Octree ==
Wen ein Objekt auf Kollisionen geprüft werden soll und der Octreeknoten in dem sich das Objekt befindet bekannt ist, so lässt sich auch die Kollisionsabfrage optimieren. Das Objekt muss nur im aktuellen Ast auf Kollisionen geprüft werden. Das heißt mit allen Objekten die sich in hierarschisch höher gelegen Knoten befinden und mit allen Objekten die sich im aktuellen Knoten - des zu prüfenden Objektes - oder Ästen dieses Knoten befinden.
+
Wenn ein Objekt auf Kollisionen geprüft werden soll und der Octreeknoten in dem sich das Objekt befindet bekannt ist, so lässt sich auch die Kollisionsabfrage optimieren. Das Objekt muss nur im aktuellen Ast auf Kollisionen geprüft werden. Das heißt mit allen Objekten die sich:
 +
* in hierarchisch höher gelegen Knoten,
 +
* im aktuellen Knoten (in dem des zu prüfenden Objektes), oder  
 +
* in Ästen (Kinderknoten) des aktuellen Knotens befinden
  
 
== Weiter Anwendungsbereiche ==
 
== Weiter Anwendungsbereiche ==
 
Die Hierarchische Natur des Octrees kann noch für einige weitere Anwendungsgebiete erweitert werden, welche ich aber nur kurz beschreiben möchte.
 
Die Hierarchische Natur des Octrees kann noch für einige weitere Anwendungsgebiete erweitert werden, welche ich aber nur kurz beschreiben möchte.
 
*Einteilung von dynamischen Lichtquellen: Hier können leicht die Knoten herausgefunden werden auf die eine Lichtquelle eine Wirkung hat und somit muss dieses Licht auch nur für diese Teile aktiviert werden.
 
*Einteilung von dynamischen Lichtquellen: Hier können leicht die Knoten herausgefunden werden auf die eine Lichtquelle eine Wirkung hat und somit muss dieses Licht auch nur für diese Teile aktiviert werden.
*CSG ('''C'''onstructive '''s'''olid '''g'''eometry): CSG lässt sich ebenfalls sehr effizient mit einem Octree durchführen. Der Nachteil ist natürlich, dass die Geometrie in Würfel zerlegt werden muss.
+
*[[CSG]] ('''C'''onstructive '''S'''olid '''G'''eometry): CSG lässt sich ebenfalls sehr effizient mit einem Octree durchführen. Der Nachteil ist natürlich, dass die Geometrie in Würfel zerlegt werden muss.
  
 
== Links ==
 
== Links ==
*[http://www.delphigl.com/script/do_show.php?name=octree&action=2 Octree DGL Tutorial]
+
*[[Tutorial Octree]]
 +
 
 +
[[Kategorie:Anleitung]] [[Kategorie:Technik_oder_Algorithmus]]

Aktuelle Version vom 19. August 2007, 18:44 Uhr

Hinweis: Diesem Artikel sollten folgende Bilder beigefügt werden:

(Mehr Informationen/weitere Artikel)
Bildwunsch.jpg
Eine Skizze die verdeutlicht wie der Raum in einem Octree eingeteilt wird.

Octree

Bei einem Octree geht es um die hierarchische Einteilung einer Szene durch künstlich eingeführte Bereiche. Der Octree ist damit eine mögliche Raumunterteilungstechnik. Jeder Ast der baumartigen Struktur eines Octrees ist hierbei ein nach den Weltachsen ausgerichteter Würfel, dessen Raum wiederum durch bis zu 8 gleich große, kleinere Würfel eingeteilt werden kann die dann die Kinder dieses Astes dar stellen. Die Wurzel des Baumes bildet ein Würfel der die gesamte Szene umfasst.

Es gibt einige Abwandlungen bei der Verwendung von Octrees, beispielsweise könnte jeder Raum einen eigenen Octree erhalten, vom Prinzip her arbeiten sie jedoch alle gleich.

Für größere Landschaften eignet sich häufig eine Abwandlung eines Quadtrees (die 2D Variante eines Octrees) besser. Der Octree ist jedoch die allgemeinere Art eine 3D Szene einzuteilen.

Hierarchisches Einteilen der Szene

Um den Octree für eine Szene zu erstellen, muss zuerst die Wurzel - also der Würfel der die Szene umgibt - gefunden werden. Wenn dieser Würfel gefunden wurde, so kann man für jedes Objekt (oder auch auf Dreiecksbasis) prüfen ob es in einen der 8 kleineren Würfel passt. Ist dies der Fall so wird dieses Objekt in diesen Würfel (welcher einen eigenen Ast bildet) verschoben. Die Objekte die nicht eindeutig in einen Würfel passen bleiben in der Wurzel des Baumes. Dieser Vorgang wird üblicherweise so lange rekursiv durchgeführt, bis eine weitere Unterteilung des Baumes nicht mehr sinnvoll wäre (da Beispielsweise zu wenige Objekte in die neuen Äste kämen).

Für statische Teile einer Szene (wo es häufig sinnvoll ist die einzelnen Dreiecke in den Octree einzusortieren) können die einzelnen Dreiecke auch an den Würfelgrenzen in 2 Dreiecke getrennt werden, um möglichst wenige Dreiecke in den hierarchisch höher gelegenen Knoten zu habe. Um hier eine brauchbare Abbruchbedingung für das Unterteilen des Baumes zu finden muss man beachten, das man nicht endlos Dreiecke teilt. Eine Möglichkeit wäre beispielsweise zuerst nur den Octree zu erstellen, und die Dreiecke erst an dem erstellten Octree entsprechend zu teilen.

Hierarchische Sichtbarkeitsabfrage am Octree

Hier prüft man angefangen von der Wurzel jeden Knoten des Octrees auf seine Sichtbarkeit. Die 3 Möglichkeiten sind:

  • Nicht sichtbar => Zeichne weder diesen Knoten noch seine Unterknoten
  • Komplett sichtbar => Zeichne alle Elemente dieses Knotens sowie aller seiner Unterknoten
  • Teilweise sichtbar => Zeichne alle Elemente dieses Knotens, führe jedoch die Überprüfung an den Unterknoten fort

Kollisionsabfrage am Octree

Wenn ein Objekt auf Kollisionen geprüft werden soll und der Octreeknoten in dem sich das Objekt befindet bekannt ist, so lässt sich auch die Kollisionsabfrage optimieren. Das Objekt muss nur im aktuellen Ast auf Kollisionen geprüft werden. Das heißt mit allen Objekten die sich:

  • in hierarchisch höher gelegen Knoten,
  • im aktuellen Knoten (in dem des zu prüfenden Objektes), oder
  • in Ästen (Kinderknoten) des aktuellen Knotens befinden

Weiter Anwendungsbereiche

Die Hierarchische Natur des Octrees kann noch für einige weitere Anwendungsgebiete erweitert werden, welche ich aber nur kurz beschreiben möchte.

  • Einteilung von dynamischen Lichtquellen: Hier können leicht die Knoten herausgefunden werden auf die eine Lichtquelle eine Wirkung hat und somit muss dieses Licht auch nur für diese Teile aktiviert werden.
  • CSG (Constructive Solid Geometry): CSG lässt sich ebenfalls sehr effizient mit einem Octree durchführen. Der Nachteil ist natürlich, dass die Geometrie in Würfel zerlegt werden muss.

Links