mit der man z.B. auf NVIDIA Grafikkarten programmieren kann, kurz vorgestellt. Danach wird ein rudimentärer Raycaster vorgestellt, der im Zuge dieser Ausarbeitung entwickelt worden. Dieser wird daraufhin kurz evaluiert. Hier werden die verschiedenen implementierten Gradientenoperatoren bezüglich ihrer Leistung (in Bildern pro Sekunde) evaluiert. Dann werden verschiedene Beschleunigungsmöglichkeiten für das Raycasting vorgestellt. Den Abschluss dieser Ausarbeitung bildet eine Zusammenfassung sowie ein kurzer Ausblick in mögliche Folgearbeiten.

Grundlagen
==========

Dieses Kapitel bietet eine kleine Einführung in die Grundlagen des Raycastings. So werden zunächst Volumendatensätze erläutert. Im zweiten Teil wird kurz auf Raytracing und Raycasting und deren Unterschiede eingegangen. Abschließend wird auf den von der Khronos Group entwickelten Standard OpenCL eingegangen, welcher benutzt werden kann, um Programme direkt für die Grafikkarte zu entwickeln.

![Schematische Darstellung eines Volumendatensatzes[]{data-label="label:Volumendatensatz"}](images/volumen.pdf){width="0.75\columnwidth"}

Volumendatensätze
-----------------

Ein Volumendatensatz ist eine dreidimensionale Funktion, die jedem $(x,y,z)$-Tupel einen Funktionswert zuordnet:

$$V: \mathrm{N}^3 \rightarrow \mathrm{R}$$

Man stelle sich einen Quader vor, der aus senkrecht und waagerecht angeordneten Gitternetzpunkten besteht. Jeder Gitterpunkt beinhaltet genau einen Funktionswert. Diese Punkte werden auch als Voxel bezeichnet, wobei sich der Name aus Volumen und Pixel zusammensetzt. Da Volumendatensätze nur aus diesen Punkten bestehen, müssen Funktionswerte, die zwischen mehreren Punkten liegen, interpoliert werden. Dazu wird lineare oder trilinieare Interpolation 