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


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

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

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

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

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

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

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

Зеркальный свет относится к свету, который отражается в определенном направлении в соответствии с моделью освещения Фонга.

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

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

уравнения для вычисления конечных значений пикселей.

where

K? = константная зеркального освещения.
символ вектора нормальной единицы измерения поверхности. = поверхностный нормальный вектор единиц измерения, который является функцией x и y. Сведения о вычислениях см. в разделе Карта высоты и нормальный вектор .
символ вектора единицы на полпути. = вектор единицы "на полпути" между вектором единиц глаза и вектором единицы света. Сведения о вычислениях см. в разделе Источник точечных источников света .
Lr, Lg, Lb = светлый цвет в rgb-компонентах.

Константа зеркального освещения устанавливается как свойство SpecularConstant , а цвет света — в качестве свойства Color .

Точечный источник света

Точечный источник света излучает свет во всех направлениях, как на изображении здесь.

точечный свет, излучающий свет во всех направлениях.

Положение источника света задается с помощью свойства LightPosition . Эффект вычисляет вектор света L для точечного источника света с помощью приведенных здесь уравнений:

уравнение вектора света.

где Light?, Lighty и Lightz — это позиция входного света. Эффект вычисляет вектор на полпути, символ вектора на полпути, как определено в модели освещения Фонга, используя уравнение здесь. Модель освещения предполагает, что вектор глаза, символ вектора глаза, находится в (0,0,1).

Уравнение вектора на полпути.

Как L, так и H нормализуются по векторам длины единиц измерения.

Карта высоты и обычный вектор

Эффект создает карту высоты для входного изображения на основе его альфа-канала.

Компонент высоты (Z) вычисляется с помощью уравнения:

уравнение для вычисления высоты (z) поверхности.

Эффект вычисляет нормальное значение поверхности ( символ нормального вектора) для входного растрового изображения с помощью градиента Sobel.

Константы и экспоненты зеркального освещения

Зеркальный свет представляет свет, отражаемый от поверхности карты высоты изображения. Вы указываете свойство Specular Exponent , определяющее объем отражений от растрового изображения.

Более крупные экспоненты представляют более блестящие объекты и отражают свет в более сфокусированной форме.

Свойство SpecularConstant K? определяет количество отраженного света в виде соотношения входящего света.

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

Отображаемое перечисление имен и индексов Описание
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Положение света точечного источника света. Свойство является D2D1_VECTOR_3F определяется как (x, y, z). Единицы измерения находятся в независимых от устройства пикселях (DIP), а значения являются неуправляемыми и неограниченными. Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
Specular Exponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Экспонента для спектрального термина в уравнении освещения Фонга. Большее значение соответствует более отражающей поверхности. Это значение является неунитарным и должно находиться в диапазоне от 1,0 до 128. Тип — FLOAT.
Значение по умолчанию — 1,0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Отношение зеркального отражения к входящему свету. Значение является неунитарным и должно находиться в диапазоне от 0 до 10 000. Тип — FLOAT.
Значение по умолчанию — 1,0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Коэффициент масштабирования в направлении Z для создания карты высоты. Значение является неунитарным и должно находиться в диапазоне от 0 до 10 000. Тип — FLOAT.
Значение по умолчанию — 1,0f.
Цвет
D2D1_POINTSPECULAR_PROP_COLOR
Цвет входящего света. Это свойство предоставляется в виде D2D1_VECTOR_3F (R, G, B) и используется для вычисления LR, LG, LB. Тип D2D1_VECTOR_3F.
Значение по умолчанию — {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Размер элемента в ядре Sobel, используемого для создания нормальной поверхности в направлениях X и Y. Это свойство сопоставляется со значениями dx и dy в градиенте Sobel. Это свойство является D2D1_VECTOR_2F (длина единицы ядра X, длина единицы ядра Y) и определяется в (DIPS/единица ядра). Эффект использует билинейную интерполяцию для масштабирования растрового изображения в соответствии с размером элементов ядра. Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Scalemode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
Режим интерполяции, который используется эффектом для масштабирования изображения до соответствующей длины единицы ядра. Существует шесть режимов масштабирования, которые варьируются по качеству и скорости. Дополнительные сведения см. в разделе Режимы масштабирования .
Тип D2D1_POINTSPECULAR_SCALE_MODE.
Значение по умолчанию — D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

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

Перечисление Описание
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Выборка ближайшей единственной точки и ее использование. Этот режим использует меньше времени обработки, но выводит изображение самого низкого качества.
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR Использует выборку из четырех точек и линейную интерполяцию. В этом режиме выводится изображение более высокого качества, чем у ближайшего соседа.
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC Для интерполяции используется 16 примеров кубической ядра. Этот режим использует больше всего времени обработки, но выводит изображение более высокого качества.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейные выборки в одном пикселе для хорошего сглаживания краев. Этот режим хорошо подходит для уменьшения на небольшие объемы изображений с несколькими пикселями.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Использует анизотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC При уменьшении масштаба в матрице преобразования используется ядро кубов высокого качества переменного размера для предварительного уменьшения масштаба изображения. Затем использует режим кубической интерполяции для окончательного вывода.

Примечание

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

Требования

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

ID2D1Effect