三维透视转换效果

使用三维透视转换效果旋转三维图像,就像从远处查看一样。

3D 透视转换比 3D 转换效果更方便,但仅公开功能的子集。 可以使用 3D 转换 效果计算完整的 3D 转换矩阵,并将更任意的转换矩阵应用于图像。

此效果的 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();

效果属性

显示名称和索引枚举 描述
InterpolationMode
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
3D 场景中查看器的 X 和 Y 位置。 此属性是定义为:(point X,point Y)的D2D1_VECTOR_2F。 这些单位以 DIP 为单位。
使用 Depth 属性设置 Z 值。
类型为D2D1_VECTOR_2F。
默认值为 {0.0f, 0.0f}。
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
效果在旋转投影平面之前执行的转换。 此属性是定义为:(X、Y、Z)的D2D1_VECTOR_3F。 这些单位以 DIP 为单位。
类型为D2D1_VECTOR_3F。
默认值为 {0.0f、0.0f、0.0f}。
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
效果在旋转投影平面后执行的转换。 此属性是定义为:(X、Y、Z)的D2D1_VECTOR_3F。 这些单位以 DIP 为单位。
类型为D2D1_VECTOR_3F。
默认值为 {0.0f、0.0f、0.0f}。
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
效果执行的旋转中心点。 此属性是定义为:(X、Y、Z)的D2D1_VECTOR_3F。 这些单位以 DIP 为单位。
类型为D2D1_VECTOR_3F。
默认值为 {0.0f、0.0f、0.0f}。
旋转
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
每个轴的旋转角度。 此属性是定义为:(X、Y、Z)的D2D1_VECTOR_3F。 单位为度。
类型为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。

注意

但是,缩放时,异性模式在缩放时会生成 mipmap,但是,如果将 Cached 属性设置为 true,则每次为足够小的图像生成 mipmaps。

边框模式

名字 描述
D2D1_BORDER_MODE_SOFT 该效果在内插时使用透明黑色像素填充图像,从而导致软边缘。
D2D1_BORDER_MODE_HARD 该效果将输出固定到输入图像的大小。

输出位图

输出位图的大小取决于应用于图像的转换矩阵。

该效果执行转换作,然后对结果应用边界框。 输出位图是边界框的大小。

要求

要求 价值
支持的最低客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect