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


Эффект трехмерного преобразования перспективы

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

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

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

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

До
изображение перед эффектом.
После
изображение после эффекта.
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);

perspectiveTransformEffect->SetInput(0, bitmap);

perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(perspectiveTransformEffect.Get());
m_d2dContext->EndDraw();

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

Отображаемое перечисление имен и индексов Описание
ИнтерполяцияMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE
Режим интерполяции, который используется эффектом для изображения. Существует 5 режимов масштабирования, которые варьируются по качеству и скорости.
Тип D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
Значение по умолчанию — D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE
Режим, используемый для вычисления границы изображения, мягкой или жесткой. Дополнительные сведения см. в разделе Режимы границ .
Тип D2D1_BORDER_MODE.
Значение по умолчанию — D2D1_BORDER_MODE_SOFT.
Глубина
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
Расстояние от PerspectiveOrigin до плоскости проекции. Значение, указанное в DIP и должно быть больше 0.
Тип FLOAT.
Значение по умолчанию — 1000,0f.
PerspectiveOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
Расположение зрителя X и Y в трехмерной сцене. Это свойство является D2D1_VECTOR_2F определяется следующим образом: (точка X, точка Y). Единицы находятся в DIP.
Значение Z задается с помощью свойства Depth .
Тип D2D1_VECTOR_2F.
Значение по умолчанию — {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Преобразование, выполняемое эффектом перед поворотом плоскости проекции. Это свойство является D2D1_VECTOR_3F определяется следующим образом: (X, Y, Z). Единицы находятся в DIP.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Преобразование, выполняемое эффектом после поворота плоскости проекции. Это свойство является D2D1_VECTOR_3F определяется следующим образом: (X, Y, Z). Единицы находятся в DIP.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
Центральная точка поворота, выполняемого эффектом. Это свойство является D2D1_VECTOR_3F определяется следующим образом: (X, Y, Z). Единицы находятся в DIP.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.
Поворот
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Углы поворота для каждой оси. Это свойство является D2D1_VECTOR_3F определяется следующим образом: (X, Y, Z). Единицы измерения находятся в градусах.
Тип D2D1_VECTOR_3F.
Значение по умолчанию — {0.0f, 0.0f, 0.0f}.

Режимы интерполяции

Перечисление Описание
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Выборка ближайшей единственной точки и ее использование. Этот режим использует меньше времени обработки, но выводит изображение самого низкого качества.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR Использует выборку из четырех точек и линейную интерполяцию. Этот режим использует больше времени обработки, чем режим ближайшего соседа, но выводит изображение более высокого качества.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC Для интерполяции используется 16 примеров кубической ядра. Этот режим использует больше всего времени обработки, но выводит изображение более высокого качества.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейные выборки в одном пикселе для хорошего сглаживания краев. Этот режим хорошо подходит для уменьшения на небольшие объемы изображений с несколькими пикселями.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Использует анизотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.

Примечание

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

Примечание

Анизотропный режим создает MIP-карты при масштабировании, однако если для свойства Cached задано значение true для эффектов, которые являются входными данными для этого эффекта, MIP-карты не будут создаваться каждый раз для достаточно небольших изображений.

Режимы границ

Имя Описание
D2D1_BORDER_MODE_SOFT Эффект заполняет изображение прозрачными черными пикселями при интерполяции, что приводит к мягкому краю.
D2D1_BORDER_MODE_HARD Эффект прижимает выходные данные к размеру входного изображения.

Выходной растровый рисунок

Размер выходного растрового изображения зависит от матрицы преобразования, применяемой к изображению.

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

Требования

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

ID2D1Effect