C ++ Direct2D矩阵转换镜像

时间:2011-11-20 14:28:09

标签: c++ directx direct2d

我目前正在学习DirectX(2010年6月的SDK)并正在绘制位图以进行筛选。现在我希望能够对这些图像进行转换,并且无法沿x轴或y轴镜像图像。

在绘图之前,我可以设置一个将应用于绘图操作的变换矩阵。虽然DirectX使用的是D2D1_MATRIX_3x2_F类型,但根据MSDN,该矩阵中只有2x2部分用于转换。例如,矩阵{[1,0],[0,1],[0,0]}是一个单位矩阵,可以使所有内容自然显示。

据我了解,沿x轴镜像我的图像的矩阵变换应该如下所示:{[1,0],[0,-1],[0,0]},沿着y -axis然后它将是{[-1,0],[0,1],[0,0]}。如果我使用这些矩阵进行转换,我会得到一个黑屏。

对我来说,问题是,我有点陷入困境,没有想法这个问题可能是由什么造成的,或者更确切地说是由于这背后的数学中的逻辑错误还是实现本身造成的。不幸的是,除了在Direct2D RenderTarget的头文件中“必须使用矩阵变换进行镜像”的一行注释之外,我找不到任何相关材料。

我目前用于测试的源代码是:

D2D1_MATRIX_3X2_F m;
m._11 = 1; m._12 = 0;
m._21 = 0; m._22 = -1;
m._31 = 0; m._32 = 0;
m_pDX2DRenderTarget->SetTransform( m );

1 个答案:

答案 0 :(得分:0)

我完全错误地认为矩阵的第三行不相关。实际上,转换的x-y-偏移量。我在转换之后没有看到任何东西的原因是,在应用镜像之后,不仅图像本身将被镜像,而且它在屏幕上的位置。

例如,如果我显示图像使其左上边缘位于(100, 100),则在应用x轴镜像的矩阵变换后,图像的右上边缘将为{{1 }}。由于它总是在渲染区域之外,因此不会显示。