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.
Natürlich kann man die Texturkoordinaten wieder lokal verändern, um z.B. eine wellige Wasseroberfläche zu simulieren.
← Optische Effekte | ● | Shadow Volumes →