1

我目前正在学习 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 轴然后将是 { [-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 );
4

1 回答 1

0

我完全错误地认为矩阵的第三行不相关。它实际上是转换的x-y-偏移量。之所以我变形后什么都看不到,是因为应用了镜子后,不仅图像本身会被镜像,而且它在屏幕上的位置也会被镜像。

例如,如果我显示一个图像,使其左上边缘位于(100, 100),在应用 x 轴镜的矩阵变换后,图像的右上边缘将位于(-100, 100)。由于这始终在渲染区域之外,因此不会显示。

于 2011-11-21T02:26:01.710 回答