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


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

Используйте эффект трехмерного преобразования для применения произвольной матрицы преобразования 4x4 к изображению.

Этот эффект применяет матрицу (M?), указанную к угловым вершинам исходного изображения ([ x y z 1 ]), используя следующее вычисление:

[ xr yr zr 1 ]=[ x y z 1 ]*M?

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

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

До
изображение перед преобразованием.
После
изображение после преобразования.
ComPtr<ID2D1Effect> D2D13DTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DTransform, &D2D13DTransformEffect);

D2D13DTransformEffect->SetInput(0, bitmap);

// You can use the helper methods in D2D1::Matrix4x4F to create common matrix transformations.
D2D1_MATRIX_4X4_F matrix = 
    D2D1::Matrix4x4F::Translation(0.0f, -192.0f, 0.0f) *
    D2D1::Matrix4x4F::RotationY(30.0f) *
    D2D1::Matrix4x4F::Translation(0.0f, 192.0f, 0.0f);

D2D13DTransformEffect->SetValue(D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

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

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

Отображаемое перечисление имен и индексов Описание
ИнтерполяцияMode
D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE
Режим интерполяции, который используется эффектом для изображения. Существует 5 режимов масштабирования, которые варьируются по качеству и скорости.
Тип D2D1_3DTRANSFORM_INTERPOLATION_MODE.
Значение по умолчанию — D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DTRANSFORM_PROP_BORDER_MODE
Режим, используемый для вычисления границы изображения, мягкой или жесткой. Дополнительные сведения см. в разделе Режимы границ .
Тип D2D1_BORDER_MODE.
Значение по умолчанию — D2D1_BORDER_MODE_SOFT.
TransformMatrix
D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX
Матрица преобразования 4x4, примененная к плоскости проекции. Следующее матричное вычисление используется для сопоставления точек из одной трехмерной системы координат с преобразованной двухD-системой координат.
Матрица трехмерной глубины Где:
X, Y, Z = координаты плоскости входной проекции
Mx,y = Элементы матрицы преобразования
X , Y , Z = Координаты плоскости выходной проекции

Отдельные матричные элементы не ограничены и являются унитарными.
Тип D2D1_MATRIX_4X4_F.
Значение по умолчанию — Matrix4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1).

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

Перечисление Описание
D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Выборка ближайшей единственной точки и ее использование. Этот режим использует меньше времени обработки, но выводит изображение самого низкого качества.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR Использует выборку из четырех точек и линейную интерполяцию. В этом режиме используется больше времени обработки, чем в режиме ближайшего соседа, но выводится изображение более высокого качества.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC Использует 16 примеров кубического ядра для интерполяции. Этот режим использует больше всего времени обработки, но выводит изображение более высокого качества.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейные выборки в одном пикселе для правильного сглаживания краев. Этот режим хорошо подходит для уменьшения масштаба на небольшие объемы изображений с несколькими пикселями.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Использует анизотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.

Примечание

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

Примечание

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

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

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

Класс матрицы преобразования 4x4

Direct2D предоставляет матричный класс 4x4 для предоставления вспомогательных функций для преобразования изображения в 3 измерениях. Дополнительные сведения и описание всех членов класса см. в разделе Matrix4x4F .

Функция Описание Матрица
Matrix4x4F::Scale(X, Y, Z) Создает матрицу преобразования, которая масштабирует плоскость проекции в направлении X, Y и/или Z. Матрица scale3d
SkewX(X) Создает матрицу преобразования, которая наклоняет плоскость проекции в направлении X. Показывает матрицу неравномерного распределения в направлении X.
Неравномерное распределение (Y) Создает матрицу преобразования, которая наклоняет плоскость проекции в направлении Y. Матрица неравномерного распределения
Translation(X, Y, Z) Создает матрицу преобразования, которая преобразует плоскость проекции в направлении X, Y или Z. преобразование матрицы
RotationX(X) Создает матрицу преобразования, которая поворачивает плоскость проекции вокруг оси X. Поворот матрицы x
RotationY(Y) Создает матрицу преобразования, которая поворачивает плоскость проекции вокруг оси Y. Матрица поворота Y
RotationZ(Z) Создает матрицу преобразования, которая поворачивает плоскость проекции вокруг оси Z. Повернуть матрицу Z
PerspectiveProjection(D) Преобразование перспективы со значением глубины D. матрица перспективы
RotationArbitraryAxis(X, Y, Z, градусы) Поворачивает плоскость проекции вокруг указанной оси.

Требования

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

ID2D1Effect