【问题标题】:C++ Direct2D Matrix transformation mirrorC++ Direct2D 矩阵变换镜像
【发布时间】:2012-05-09 02:36:13
【问题描述】:

我目前正在学习 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 );

【问题讨论】:

    标签: c++ directx direct2d


    【解决方案1】:

    我完全误解了矩阵的第三行不相关。它实际上是转换的x- 和y-offset。变形后看不到任何东西的原因是,应用镜像后,不仅图像本身会被镜像,而且它在屏幕上的位置也会被镜像。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2021-12-29
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多