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


Эффект диффузного освещения точки

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

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

CLSID для этого эффекта является CLSID_D2D1PointDiffuse. Чтобы использовать этот эффект, добавьте dxguid.lib в зависимости компоновщика.

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

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

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

Диффузное освещение относится к свету, который отражается в нескольких направлениях, как видно здесь.

диффузное освещение разбросано во всех направлениях.

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

вычисления выходных битмапов.

Где:

kd = диффузная константы освещения. Задано пользователем.
символ нормального вектора поверхности. = единичный вектор нормали поверхности, функция от x и y.
символ вектора единицы. = вектор единицы, указывающий от поверхности к свету.
Lr, Lg, Lb = светлый цвет в компонентах RGB.

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

Отображаемое имя и перечисление индексов Описание
Позиция света
D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION (позиция света для точечной рассеянной поверхности)
Положение точечного источника света. Свойство: D2D1_VECTOR_3F, определяемый как (x, y, z). Единицы находятся в независимых от устройства пикселях (DIPs) и не связаны.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
ДиффузнаяКонстанта
D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT
Соотношение диффузного отражения к объему входящего света. Это свойство должно находиться в диапазоне от 0 до 10 000 и не является модульным.
Тип FLOAT.
Значение по умолчанию — 1.0f.
SurfaceScale
D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE
Коэффициент масштабирования в направлении Z. Масштаб поверхности является безразмерным и должен находиться в пределах от 0 до 10 000.
Тип "FLOAT".
Значение по умолчанию — 1.0f.
Цвет
D2D1_POINTDIFFUSE_PROP_COLOR
Цвет входящего света. Это свойство предоставляется в виде вектора 3 (R, G, B) и используется для вычисления LR, LG, LB.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
Размер элемента в ядре Sobel, используемый для создания нормальной поверхности в направлении X и Y. Это свойство сопоставляется со значениями dx и dy в градиенте Sobel. Это свойство является D2D1_VECTOR_2F (длина единицы ядра X, длина единицы ядра Y) и определена в (DIPs/ядровая единица). Эффект использует двулинейную интерполяцию для масштабирования растрового изображения для сопоставления размера элементов ядра.
Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
Режим масштабирования
D2D1_POINTDIFFUSE_PROP_SCALE_MODE
Режим интерполяции, который используется эффектом для масштабирования изображения до нужной длины единицы ядра. Существует шесть режимов масштабирования, которые отличаются качеством и скоростью. См. режимы масштабирования для получения дополнительной информации.
Тип D2D1_POINTDIFFUSE_SCALE_MODE.
Значение по умолчанию — D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

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

Перечисление Описание
D2D1_POINTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Выбирает ближайшую единственную точку и использует её. В этом режиме используется меньше времени обработки, но выводится изображение с наименьшим качеством.
D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. Этот режим выводит изображение более высокого качества, чем ближайший сосед.
D2D1_POINTDIFFUSE_SCALE_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. В этом режиме используется максимальное время обработки, но выводится более качественный образ.
D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейных выборок в одном пикселе для хорошего сглаживания краёв. Этот режим подходит для уменьшения масштаба на небольшие значения на изображениях с малым количеством пикселей.
D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC Использует анисотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Использует высококачественное кубическое ядро переменного размера для предварительного уменьшения масштаба изображения, если уменьшение масштаба участвует в матрице преобразования. Затем используется режим интерполяции кубов для конечных выходных данных.

Заметка

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

Требования

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

ID2D1Effect