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


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

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

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

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

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

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

Пример скриншота с эффектом , который показывает

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

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

Где:

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

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

Отображаемое имя и список индексов Тип и значение по умолчанию Описание
Позиция света
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Позиция точечного источника света. Свойство — это D2D1_VECTOR_3F, заданный в виде (x, y, z). Единицы находятся в независимых от устройства пикселях (DIPs) и не связаны.
PointsAt
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Где сосредоточен свет прожектора. Свойство представлено как D2D1_VECTOR_3F с (x, y, z). Единицы измеряются в DIPs, и значения не ограничены.
Фокус
D2D1_SPOTDIFFUSE_PROP_FOCUS
ПЛАВАТЬ
1.0f
Фокус прожектора. Это свойство является безразмерным и определяется в диапазоне от 0 до 200.
Ограничение конического угла
D2D1_SPOTDIFFUSE_ПАРАМЕТР_УГОЛ_ОГРАНИЧЕНИЯ_КОНУСА
ПОПЛАВОК
90.0f
Угол конуса, ограничивающий область, в которой проецируется свет. Свет не проецируется за пределами конуса. Ограничивающий угол конуса — это угол между осью точечного света (осью между свойством LightPosition и свойством PointsAt) и световым конусом. Это свойство определяется в градусах и должно быть от 0 до 90 градусов.
ДиффузнаяКонстанта
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
ПОПЛАВОК
1.0f
Соотношение диффузного отражения к объему входящего света. Это свойство должно находиться в диапазоне от 0 до 10 000 и не является модульным.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
ПЛАВУЧИЙ
1.0f
Коэффициент масштабирования в направлении Z. Масштаб поверхности является безразмерным и должен находиться в пределах от 0 до 10 000.
Цвет
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Цвет входящего света. Это свойство предоставляется в виде вектора 3 (R, G, B) и используется для вычисления LR, LG, LB.
ДлинаЕдиницыЯдра
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
Размер элемента в ядре Sobel, используемый для создания нормальной поверхности в направлении X и Y. Это свойство сопоставляется со значениями dx и dy в градиенте Sobel. Это свойство является D2D1_VECTOR_2F(длина единицы ядра X, длина единицы ядра Y) и определена в (DIPs/Kernel Unit). Эффект использует двулинейную интерполяцию для масштабирования растрового изображения для сопоставления размера элементов ядра.
Режим Масштаба
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
Режим масштабирования D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
Режим интерполяции, который эффект использует для масштабирования изображения до соответствующей длины единицы ядра. Существует шесть режимов масштабирования, которые отличаются качеством и скоростью. Дополнительную информацию см. в режимах масштабирования .

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

Перечисление Описание
D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Выбирает ближайшую точку и использует её. В этом режиме используется меньше времени обработки, но выводится изображение с наименьшим качеством.
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. Этот режим выводит изображение более высокого качества, чем ближайший сосед.
D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. В этом режиме используется максимальное время обработки, но выводится более качественный образ.
D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейные выборки в одном пикселе для хорошего сглаживания граней. Этот режим подходит для уменьшения изображений небольшого размера с малым количеством пикселей.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Использует анисотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Использует кубическое ядро переменной размерности и высокого качества для предварительного уменьшения масштаба изображения, если уменьшение масштаба предусмотрено матрицей преобразования. Затем используется режим интерполяции кубов для конечных выходных данных.

Заметка

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

Требования

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

ID2D1Effect