Если вы используете OpenGL, в разделе 9 часто задаваемых вопросов по OpenGL: Преобразования описывается, как именно это сделать. И нет, это не связано с трассировкой лучей, поскольку это понятно, что это очень неэффективный (но качественный) способ сделать это.
9.170 Как мне сделать зеркало?
Вот, по сути, то, что написано в FAQ, и пример кода демонстрирует:
- Установите отраженную матрицу представления. Это делается для зеркал с выравниванием по оси, что объясняется во втором абзаце.
- Нарисуй сцену
- Восстановите матрицу вида и очистите буфер глубины
- Рендеринг сцены снова; Фактическая геометрия зеркала в этой сцене должна быть полупрозрачной или полностью прозрачной, чтобы показать ранее отрисованную зеркальную сцену.
Очевидно, что есть много возможностей для оптимизации. При рендеринге отраженной сцены вы, вероятно, должны делать как можно больше отборов, так как зеркала, как правило, маленькие, и отбор по умолчанию за кадром не учитывает геометрию, которая отображается на экране, но не видна через зеркало. Вы также можете визуализировать упрощенную версию сцены через зеркало. Для эффектов и для того, чтобы пользователь мог не заметить снижение качества, вы можете применить шейдер (например, размытие, или, может быть, яркий / размытый), когда вы делаете зеркальный рендеринг.
Я полагаю, если вы используете DirectX, процедура будет такой же.