3D 透视转换效果
使用 3D 透视转换效果以 3 维旋转图像,就像从远处查看一样。
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 位置。 此属性D2D1_VECTOR_2F定义为: (X 点、Y 点) 。 单位以 DIP 为单位。 使用 Depth 属性设置 Z 值。 类型为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。
注意
各向异性模式在缩放时生成 mipmap,但是,如果在输入到此效果的效果上将 Cached 属性设置为 true,则不会每次为足够小的图像生成 mipmap。
边框模式
名称 | 说明 |
---|---|
D2D1_BORDER_MODE_SOFT | 该效果在图像内插时用透明的黑色像素填充图像,从而形成柔和边缘。 |
D2D1_BORDER_MODE_HARD | 该效果将输出固定为输入图像的大小。 |
输出位图
输出位图的大小取决于应用于图像的转换矩阵。
该效果执行转换操作,然后在结果周围应用边界框。 输出位图是边界框的大小。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
最低受支持的服务器 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
标头 | d2d1effects.h |
库 | d2d1.lib、dxguid.lib |