Я смог добавить кубмапинг для отражений. От векторной алгебры чуть голова не взорвалась, но я наконец-то закончил с ними.
Принцип работы алгоритма довольно простой: это тот же самый алгоритм, которым рисуется скайбокс, только при семплировании текстуры скайбокса вектор направления взгляда камеры преломляется о нормаль треугольника.
В результате очень дешевые и красивые отражения.
Радует то, что до реализации этого алгоритма мне удалось додуматься самому. Обычно всё гениальное лежит на поверхности и если поразмыслить над тем, как математически рассчитать рендеринг сферической панорамы на 360 градусов, то рано или поздно этот алгоритм придёт на ум.
У нас ведь есть всего 3 оси (XYZ), направление которых может быть либо положительным, либо отрицательным. Это получается куб. А из проекции мы можем высчитать направление взгляда и найти точку на этом кубе. И если текстура будет кубической, то мы сможем легко замапить на неё окружение.
А когда мы будем рисовать треугольники, то мы можем взять нормаль треугольника и отразить вектор направления взгляда - получится зеркальное отражение.
Вот и вся логическая цепочка, чтобы изобрести такой алгоритм.
Кстати в статье про кубмапинг на вики написано, что технологию environment mapping'а в 1976 году придумали Джим Блинн из NASA, который участвовал в запуске Voyager, и Мартин Эдвард Ньюэлл, который создал 3D модель того самого чайника, который я использовал для тестирования алгоритма. Как всё интересно переплетено оказалось...

А ещё вот что будет, если текстуру скайбокса заменить на случайный участок памяти: