Поделиться через


Эффект удаленного зеркального освещения

Используйте дистанционный-спекулярный эффект освещения, чтобы создать изображение, которое выглядит как отражающая поверхность, где источник света кажется поступающим из большого расстояния (например, солнце или верхний свет). Этот эффект использует альфа-канал в качестве карты высоты и освещает изображение с дальним источником света.

Цвет выходного растрового изображения является результатом светлого цвета, положения света и геометрии поверхности. Выходные данные альфа-канала для каждого пикселя с зеркальным освещением — максимальное количество выходных данных красного, зеленого и синего каналов для этого пикселя.

CLSID для этого эффекта — это CLSID_D2D1DistantSpecular.

Пример изображения

В примере показаны входные и выходные изображения эффекта дальнего зеркального освещения.

Пример скриншота эффекта, показывающий входные и выходные изображения эффекта зеркального освещения.

Окончательный растровый рисунок выходных данных можно вычислить с помощью следующих уравнений.

вычисление растрового изображения

где

k? = константа зеркального освещения.
обычный символ поверхности. = вектор обычной единицы поверхности.
ru-RU: символ единичного вектора на полпути.= "единичный" вектор на полпути между вектором глаз и вектором света.
Cr, Cg, Cb = светлый цвет в компонентах RGB.

Удаленный источник света

На рисунке ниже показан пример направления света от удаленного источника света.

далекий источник света

Эффект использует параметры азимута и угла возвышения для вычисления вектора света l vector., используя следующие уравнения:

вычисление вектора света

where Light?, Lighty, и Lightz являются значениями положения света.

Свойства эффекта

Отображаемое имя и перечисление индексов Описание
Азимут
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
Угол направления источника света в плоскости XY относительно оси X против часовой стрелки. Единицы находятся в градусах и должны находиться в диапазоне от 0 до 360 градусов.
Тип FLOAT.
Значение по умолчанию — 0.0f.
Возвышенность
D2D1_DISTANTSPECULAR_PROP_ELEVATION
Угол направления источника света в плоскости YZ относительно оси Y в направлении счетчика часов. Единицы находятся в градусах и должны находиться в диапазоне от 0 до 360 градусов.
Тип FLOAT.
Значение по умолчанию — 0.0f.
Коэффициент зеркального блеска
D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT
Экспонента для зеркального компонента в уравнении освещения Фонга. Большее значение соответствует более отражающей поверхности. Значение является безразмерным и должно находиться в диапазоне от 1,0 до 128. Тип FLOAT.
Значение по умолчанию — 1.0f.
SpecularConstant
D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT
Соотношение зеркального отражения к входящему свету. Это значение является безразмерным и должно составлять от 0 до 10 000. Тип FLOAT.
Значение по умолчанию — 1.0f.
SurfaceScale
D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE
Коэффициент масштабирования в направлении Z. Это значение является безразмерным и должно находиться в диапазоне от 0 до 10 000. Тип FLOAT.
Значение по умолчанию — 1.0f.
Цвет
D2D1_ДАЛЬНИЙЗЕРКАЛЬНЫЙ_СВОЙСТВО_ЦВЕТ
Цвет входящего света. Это свойство предоставляется как D2D1_VECTOR_3F (R, G, B) и используется для вычисления LR, LG, LB. Тип D2D1_VECTOR_3F.
Значение по умолчанию — {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Размер элемента в ядре Sobel, используемый для создания нормальной поверхности в направлении X и Y. Это свойство представляет собой D2D1_VECTOR_2F (длина единицы ядра X, длина единицы ядра Y) и определяется в (независимых от устройства пикселях (DIPs)/единицах ядра). Эффект использует двулинейную интерполяцию для масштабирования растрового изображения для сопоставления размера элементов ядра. Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Режим Масштабирования
D2D1_DISTANTSPECULAR_PROP_SCALE_MODE
Режим интерполяции, который эффект использует для масштабирования изображения до соответствующей длины единицы ядра. Существует шесть режимов масштабирования, которые отличаются качеством и скоростью.
Тип D2D1_DISTANTSPECULAR_SCALE_MODE.
Значение по умолчанию — D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Режимы масштабирования

Перечисление Описание
D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Отбирается ближайшая точка и используется она. В этом режиме используется меньше времени обработки, но выводится изображение с наименьшим качеством.
D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. Этот режим выводит изображение более высокого качества, чем ближайший сосед.
D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. В этом режиме используется максимальное время обработки, но выводится более качественный образ.
D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейных семпла в одном пикселе для хорошего сглаживания краев. Этот режим подходит для уменьшения масштаба на небольшие величины на изображениях с малым количеством пикселей.
D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC Использует анисотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_DISTANTSPECULAR_SCALE_MODE_высокое_качество_кубическая Использует ядро высокого качества с переменным размером для предварительного уменьшения масштаба изображения, если уменьшение масштаба участвует в матрице преобразования. Затем используется режим интерполяции кубов для конечных выходных данных.

Заметка

Если вы не выберете режим, эффект по умолчанию используется для D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Минимальный поддерживаемый сервер Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Заголовок d2d1effects.h
Библиотека d2d1.lib, dxguid.lib

ID2D1Effect