我正在使用WIC和Direct2D(通过SharpDX)将照片合成到视频帧中。对于每个帧,我都有精确的坐标,每个角都可以找到。虽然照片本身是标准的宽高比(例如4:3或16:9),但插入点不是 - 它们可能会旋转,缩放和倾斜。
现在我知道在Direct2D中我可以应用矩阵变换来完成这个......但我不确定如何。我看到的例子更多的是关于应用特定变换(例如旋转30度)而不是尝试匹配确切的目的地。
鉴于我知道上面的确切坐标(A,B,C,D),是否有一种简单的方法将源图像映射到目标上?或者,如果给定源和目标坐标,我将如何生成矩阵?
答案 0 :(得分:2)
如果Direct3D是一个选项,您需要做的就是将四边形渲染为两个三角形(青蛙纹理映射到它上面)。
为了确保没有伪影,将四边形渲染为索引网格,如示例here中所示(请注意,它在两个三角形中共享顶点0和顶点2)。当然,您可以用A,B,C和D替换实际的顶点坐标。
首先,您可以查看SlimDX的these教程,这是一套优秀的针对DirectX的.NET绑定。
答案 1 :(得分:2)
Direct2D无法实现这一目标。对于带有自定义顶点着色器的Direct2D1.1(来自Win8 Metro),这是可能的,但最后,正如ananthonline建议的那样,使用Direct3D11更容易实现。
此外,您可以使用更容易设置的三角形条带基元(您不需要创建索引缓冲区)。对于坐标,您可以直接将坐标发送到顶点着色器而不进行任何变换(顶点着色器会将输入SV_POSITION直接复制到像素着色器)。您只需将坐标映射到x [-1,1]和y [-1,1]。我建议你从SharpDX MiniCubeTexture样本开始,更改矩阵以执行正交投影(而不是样本透视)。