Computergrafik

Spiegelungen

Optische Effekte | | Shadow Volumes

Für Spiegelungen zeichnet man die Szene erst einmal in eine Textur aus Sicht der an der Spiegelfläche reflektierten Kamera:

http://khayyam.kaplinski.com/2011/09/reflective-water-with-glsl-part-i.html

Die Transformation der Kamera berechnet man über $M'_{camera} = M_{reflection} \cdot M_{camera}$

mit der Reflektionsmatrix der Spiegelfläche $N_x\cdot x + N_y\cdot y + N_z\cdot z + D = 0$ (N ist der Normalenvektor der Fläche):

$M_{reflection} = \left(\begin{array}{cccc}1-2N_x^2&-2N_xN_y&-2N_xN_z&-2N_xD\\-2N_xN_y&1-2N_y^2&-2N_yN_z&-2N_yD\\-2N_xN_z&-2N_yN_z&1-2N_z^2&-2N_zD\\0&0&0&1\end{array}\right)$

Beispielsweise ist die Reflektionsmatrix für eine horizontale spiegelnde Fläche mit der Ebenengleichung $y+2=0$ mit der Flächennormale $N=(0,1,0)^T$ und $D=2$:

$M_{reflection} = \left(\begin{array}{cccc}1&0&0&0\\0&-1&0&-4\\0&0&1&0\\0&0&0&1\end{array}\right)$

Anschließend zeichnet man die Szene regulär, wobei die Spiegelfläche mit der vorher gerenderten Textur belegt wird.

ReflectingMirror

Natürlich kann man die Texturkoordinaten wieder lokal verändern, um z.B. eine wellige Wasseroberfläche zu simulieren.

ReflectingWater


Optische Effekte | | Shadow Volumes

Options: