Сегодня далеко не каждая компьютерная 3D игра может похвастаться наличием зеркальных отражений или теней (даже примитивных). Скорее всего, это связано с тем, что существующие средства для достижения этих эффектов пока не обеспечивают достаточно высокой скорости, и разработчикам приходится жертвовать качеством для достижения хорошей производительности.
Далее приведен достаточно простой алгоритм для получения этих эффектов. Основным моментом в этом алгоритме является активное использование буфера трафарета (stencil buffer). Этот алгоритм может быть использован с любыми библиотеками, поддерживающими буфер трафарета, т. е. OpenGL любой версии и Direct3D версий не ниже 6.0.
Краткая последовательность действий, выполняемых для вывода изображения на каждом кадре (для простоты предполагаем, площадка, на которую проецируется тень и на которой выводится зеркальное отражение, расположена параллельно плоскости XOZ и находится в центре системы координат):
Недостатком данного метода является катастрофическое падение скорости, если буфер трафарета реализован программно.
Исходные тексты программы, использующей описанные выше эффекты, приведены в приложении А, а её экранная форма приведена на рисунке 3.4.