Эффект точечного отраженного освещения
Используйте эффект точечного освещения, чтобы создать изображение, которое кажется отражающей поверхностью. Эффект использует альфа-канал изображения в качестве карты высоты и точечный источник света, который вы позиционируете, и вычисляет отражение и свет в соответствии с зеркальной частью модели освещения Фонга.
Цвет выходного растрового изображения является результатом светлого цвета, положения света и геометрии поверхности. Выходные данные альфа-канала для каждого пикселя с зеркальным освещением — это максимальное количество выходных данных красного, зеленого и синего каналов для этого пикселя.
CLSID для этого эффекта CLSID_D2D1PointSpecular.
- Пример изображения
- Точечный источник света
- Карта высоты и обычный вектор
- Константы и экспоненты зеркального освещения
- Свойства эффекта
- Режимы масштабирования
- Requirements
- Связанные темы
Пример изображения
В этом примере показаны входные и выходные изображения эффектов точечного освещения.
Зеркальный свет относится к свету, который отражается в определенном направлении в соответствии с моделью освещения Фонга.
Эффект вычисляет конечные выходные значения пикселей с помощью приведенных здесь уравнений:
where
- K? = константная зеркального освещения.
= поверхностный нормальный вектор единиц измерения, который является функцией x и y. Сведения о вычислениях см. в разделе Карта высоты и нормальный вектор .
= вектор единицы "на полпути" между вектором единиц глаза и вектором единицы света. Сведения о вычислениях см. в разделе Источник точечных источников света .
Lr, Lg, Lb = светлый цвет в rgb-компонентах.
Константа зеркального освещения устанавливается как свойство SpecularConstant , а цвет света — в качестве свойства Color .
Точечный источник света
Точечный источник света излучает свет во всех направлениях, как на изображении здесь.
Положение источника света задается с помощью свойства LightPosition . Эффект вычисляет вектор света L для точечного источника света с помощью приведенных здесь уравнений:
где Light?, Lighty и Lightz — это позиция входного света. Эффект вычисляет вектор на полпути, как определено в модели освещения Фонга, используя уравнение здесь. Модель освещения предполагает, что вектор глаза, , находится в (0,0,1).
Как L, так и H нормализуются по векторам длины единиц измерения.
Карта высоты и обычный вектор
Эффект создает карту высоты для входного изображения на основе его альфа-канала.
Компонент высоты (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 |