3D 转换效果

使用 3D 转换效果将任意 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();

效果属性

显示名称和索引枚举 说明
InterpolationMode
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 转换矩阵。 以下矩阵计算用于将点从一个 3D 坐标系映射到转换后的 2D 坐标系。
3D 深度矩阵 其中:
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、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。

注意

各向异性模式在缩放时生成 mipmap,但是,如果在输入到此效果的效果上将 Cached 属性设置为 true,则不会每次为足够小的图像生成 mipmap。

边框模式

名称 说明
D2D1_BORDER_MODE_SOFT 该效果在图像内插时用透明的黑色像素填充图像,从而形成柔和边缘。
D2D1_BORDER_MODE_HARD 该效果将输出固定为输入图像的大小。

4x4 转换矩阵类

Direct2D 提供了一个 4x4 矩阵类,用于提供用于转换 3 维图像的帮助程序函数。 有关所有类成员的详细信息和说明,请参阅 Matrix4x4F 主题。

函数 说明 Matrix
Matrix4x4F::Scale (X、Y、Z) 生成一个转换矩阵,该矩阵按 X、Y 和/或 Z 方向缩放投影平面。 scale3d 矩阵
SkewX (X) 生成一个转换矩阵,使投影平面向 X 方向倾斜。 显示 X 方向的倾斜矩阵。
倾斜 (Y) 生成一个转换矩阵,该矩阵在 Y 方向上倾斜投影平面。 倾斜矩阵
翻译 (X、Y、Z) 生成一个转换矩阵,该矩阵可平移 X、Y 或 Z 方向的投影平面。 translate matrix
RotationX (X) 生成一个转换矩阵,该矩阵围绕 X 轴旋转投影平面。 旋转 x 矩阵
RotationY (Y) 生成一个转换矩阵,该矩阵围绕 Y 轴旋转投影平面。 旋转 y 矩阵
RotationZ (Z) 生成一个转换矩阵,该矩阵围绕 Z 轴旋转投影平面。 旋转 z 矩阵
PerspectiveProjection (D) 深度值为 D 的透视转换。 透视矩阵
RotationArbitraryAxis (X、Y、Z、degrees) 围绕指定的轴旋转投影平面。

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
最低受支持的服务器 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect