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


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

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

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

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

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

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

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

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

вычисление выходного растрового рисунка

where

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

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

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

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

Эффект использует параметры азимута и высоты для вычисления l-вектора света. С помощью следующих уравнений:

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

где Light?, Lighty и Lightz — это входные значения положения света.

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

Отображаемое перечисление имен и индексов Описание
Азимут
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
Угол направления источника света в плоскости XY относительно оси X в направлении счетчика часов. Единицы измерения находятся в градусах и должны быть от 0 до 360 градусов.
Тип — FLOAT.
Значение по умолчанию — 0,0f.
Elevation
D2D1_DISTANTSPECULAR_PROP_ELEVATION
Угол направления источника света в плоскости YZ относительно оси Y в направлении счетчика часов. Единицы измерения находятся в градусах и должны быть от 0 до 360 градусов.
Тип — FLOAT.
Значение по умолчанию — 0,0f.
Specular Exponent
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_DISTANTSPECULAR_PROP_COLOR
Цвет входящего света. Это свойство предоставляется в виде 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) и определяется в (независимые от устройства пиксели (DIP)/Единица ядра). Эффект использует билинейную интерполяцию для масштабирования растрового изображения в соответствии с размером элементов ядра. Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Scalemode
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_HIGH_QUALITY_CUBIC При уменьшении масштаба в матрице преобразования используется ядро кубов высокого качества переменного размера для предварительного уменьшения масштаба изображения. Затем использует режим кубической интерполяции для окончательного вывода.

Примечание

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

Требования

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

ID2D1Effect