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


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

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

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

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

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

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

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

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

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

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

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

где

чё? = константа зеркального освещения.
символ вектора обычной единицы поверхности. = вектор обычной единицы поверхности, который является функцией x и y. Для выполнения вычислений смотрите карту высот и нормальные векторы.
символ вектора на полпути. = "на полпути" вектор единицы измерения между вектором вектора глаз и вектором единицы света. Для расчетов см. Точечный источник света.
Lr, Lg, Lb = светлый цвет в компонентах RGB.

Вы задаете постоянную величину зеркального освещения как свойство SpecularConstant и цвет освещения как свойство Color.

Источник освещения точки

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

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

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

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

где Свет, Светy, и Светz — это положение входного света. Эффект вычисляет вектор среднего направления, символ вектора среднего направления . как определено в модели освещения Phong, с использованием указанного здесь уравнения. Модель освещения предполагает, что вектор глаз, символ вектора глаз, расположен в (0,0,1).

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

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

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

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

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

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

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

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

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

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

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

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

Отображаемое имя и перечисление индексов Описание
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Положение точечного источника света. Свойство — это D2D1_VECTOR_3F, представленный в виде (x, y, z). Единицы измерения выражаются в пикселях, независимых от устройства (DIPs), а значения — без единиц измерения и без ограничений. Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
Экспонента блеска
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}.
ДлинаЕдиницыЯдра
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Размер элемента в ядре Sobel, используемый для создания нормальной поверхности в направлениях X и Y. Это свойство сопоставляется со значениями dx и dy в градиенте Sobel. Это свойство является D2D1_VECTOR_2F(длина единицы ядра X, длина единицы ядра Y) и определено в (DIPs/Kernel Unit). Эффект использует двулинейную интерполяцию для масштабирования растрового изображения для сопоставления размера элементов ядра. Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Режим масштаба
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