1. Anpassung des OpenGL Volume Renderers auf 2D Texturen für die 3D Darstellung
Hintergrund:
WebGL ist nicht speziell fur PC´s konzipiert. Im Zuge des Trends zum portablen Internet mussten auch rechenschwächere Geräte mit berücksichtigt werden. Auf diesen soll ebenso eine nahezu uneingeschränkte Wiedergabe möglich sein. Dies führt natürlich zu Einschränkungen gegenüber dem klassischen OpenGL.
Die erste Einschränkung ist, dass OpenGL ES 2.0 als Grundlage genutzt wurde. Einige von OpenGL´s rechenintensiveren Befehlen sind dort nicht standardmässig implementiert. Für diese mussten sogenannte “Extensions” inkludiert werden um z.B. 3 D Texturen darstellen zu konnen.
WebGL hat aber weitere Restriktionen. Die Extensions von OpenGL ES 2.0 können nicht benutzt werden. Es werden nur eigens für WebGL erstellte Extensions unterstützt.
Bisher erhältliche WebGL Extensions finden sich auf der offiziellen Seite der Khronos Group
Diese unterstützten zum gegenwartigen Stand der Entwicklung noch keine 3D Texturen.
Die Lösung für dieses Problem stellt eine Aufteilung der 3D Textur in 2D Texturen dar. Hierfür wird das Prinzip des View aligned slicings verwendet.
Konzept:
Aus der 3D-Textur werden 2D-Textur-Stapel erstellt. Jeweils ein Stapel wird je nach aktuellem Augpunkt dargestellt. Die betragsgrößte Komponente ist für die Wahl des Stapels ausschlaggebend.
Exemplarisch soll nun ein Augpunkt auf der Y-Koordinate 0 befinden. Der Stapel besteht aus 4 Einzelschichten. Somit stellen sich prinzipiell die folgenden beiden Fälle ein: Entweder ist die X- oder Z-Koordinate des Augpunkts am betragsgrößten.
Es ist zu beachten, das auch das Vorzeichen eine wichtige Rolle einnimmt. Es wird immer mit der, am nähesten zum Augpunkt befindliche, Schicht begonnen zu zeichnen. Das heißt, die Schichten werden entweder von 0 zu größeren Werten oder vom Maximalwert bis zur 0 dargestellt. Die Anzahl der Unterscheidungen ist damit, in einer lediglich zweidimensionalen Betrachtung, auf 4 Fälle erhöht:
In den oberen beiden Schaubildern ist jeweils die betragsgrößte Komponente mit einem negativen Vorzeichen versehen. Die Zeichenreihenfolge ist damit immer mit dem Initialwert 0 zu aufsteigenden Werten festgelegt. Anschaulich bedeutet dies “von links nach rechts” bzw. “von vorne nach hinten”.
Analog verhält es sich wenn der Y-Parameter ungleich 0 ist. Ist dieser der betragsmäßige Maximalwert werden Schichten von “unten nach oben” bzw. “oben nach unten” gezeichnet. Durch diese Ãœberlegungen kann die 3D-Textur dargestellt werden. Insgesamt bedeutet dies 6 zu unterscheidende Fälle für die Darstellung der 2D-Texturstapel.
Durchführung:
Da der angepasste OpenGL Volume Renderers nur als Initialschritt erstellt wurde wird nicht weiter darauf eingegangen. Die gewonnen Erkenntnisse sind in das Konvertierungsprogramm und den eigentlichen WebGL-Renderer eingeflossen.
● | Konvertierprogramm →