3

我正在使用 WIC 和 Direct2D(通过 SharpDX)将照片合成为视频帧。对于每一帧,我都有找到每个角的确切坐标。虽然照片本身是标准纵横比(例如 4:3 或 16:9),但插入点不是——它们可以旋转、缩放和倾斜。

在此处输入图像描述

现在我知道在 Direct2D 中我可以应用矩阵变换来完成此操作……但我不确定如何。我看到的例子更多是关于应用特定的转换(例如旋转 30 度),而不是试图匹配一个确切的目的地。

鉴于我知道上面的确切坐标(A、B、C、D),有没有一种简单的方法可以将源图像映射到目标上?或者,在给定源坐标和目标坐标的情况下,我将如何生成矩阵?

4

2 回答 2

2

如果 Direct3D 是一个选项,您需要做的就是将四边形渲染为两个三角形(将青蛙纹理映射到其上)。

为确保没有伪影,请将四边形渲染为索引网格,就像此处的示例一样(请注意,它在两个三角形中共享顶点 0 和顶点 2)。当然,您可以将实际的顶点坐标替换为 A、B、C 和 D。

首先,您可以查看有关 SlimDX 的这些教程,这是一组出色的 DirectX .NET 绑定。

于 2012-07-05T18:42:59.440 回答
2

用 Direct2D 实现这一点实际上是不可能的。使用带有自定义顶点着色器的 Direct2D1.1(来自 Win8 Metro)可能会实现这一点,但最终,正如 ananthonline 所建议的那样,使用 Direct3D11 会更容易做到这一点。

您还可以使用更易于设置的三角形条带图元(您不需要创建索引缓冲区)。对于坐标,您可以直接将坐标发送到顶点着色器而无需任何变换(顶点着色器会将输入 SV_POSITION 直接复制到像素着色器)。您只需将坐标映射到 x [-1,1] 和 y[-1,1]。我建议您从 SharpDX MiniCubeTexture 示例开始,更改矩阵以执行正交投影(而不是示例透视)。

于 2012-07-06T12:22:47.697 回答