DirectX 8 - Урок 7. Отражение
Продолжая тему уроков, решил я затронуть один очень интересный эффект -
Environment Mapping. Примерно это можно перевести как - наложение карт окружения. Звучит довольно туманно, но этот эффект позволяет
добиться симуляции зеркальных объектов. Почему симуляции, спросите вы? Скажу по
секрету, что на самом деле объект ничего не отражает :(. Сейчас все объясню.
Рисунок 1. Зеркальный чайник
В Direct3D поддерживается два типа наложения карт окружения - сферическое и
кубическое, и называются они соответственно - Spherical Environment Mapping и Cubic Environment
Mapping. Посмотрите на рисунок вверху. Здесь я использовал сферическое
наложение карт окружения. Взял готовую текстуру, что-то наподобие этой.
Рисунок 2. "Сферическая" текстура
И для каждой вершины модели просчитал текстурные координаты по формулам:
u = Nx/2 + 0.5 v = Ny/2 + 0.5 , где u и v - текстурные координаты, а Nx и Ny - мировые координаты нормали
Сделал я это конечно же в вершинном шейдере.
mad r5.x,r1.x,c15.z,c15.z
mad r5.y,r1.y,c15.z,c15.z
mov r5.z,c15.x
mov r5.w,c15.x
mov oT0, r5
|
Для кубического наложения карт окружения используются другие расчеты текстурных координат и другой тип текстуры - кубический. Но об этом позже.
Как видите, объект на самом деле ничего не отражает, а просто здесь используется
готовая текстура с динамической генерацией текстурных координат. Но от этого
эффект не становится хуже, не правда ли? Исходный текст этой программы и
exe-файл вы можете взять
здесь.
Взято с DirectX Design
|