在 Direct2D 中使用单位矩阵乘法 - 为什么?

Multiplication with identity matrix in Direct2D - why?

本文关键字:为什么 Direct2D 单位      更新时间:2023-10-16

我正在使用C++。我在MSDN上看到了下面的代码[here](-here I should add the link-)

m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

我想知道为什么它们会与单位矩阵相乘。它不会进行任何更改:I * A = A如果A * B = C.I * C = C,不是C * I = A,所以它不是C * I = A,但我的朋友说如果我SetTransform(identity),渲染目标就会变成初始状态。

为什么它们与单位矩阵相乘?

我在这里看到这个语法是在想要删除当前转换时使用

的他们说如果你有:

pRenderTarget->SetTransform(
D2D1::Matrix3x2F::Rotation(20, D2D1::Point2F(100,100)));

转换将应用于所有后续绘制操作,直到您再次调用SetTransform。若要删除当前转换,请使用单位矩阵调用SetTransform,该矩阵由Matrix3x2F::Identity函数返回。

pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

初始转换可能为零,也可能是垃圾(未初始化),甚至可能是标识,但我们不知道。因此,应将其设置为标识,以便知道转换是什么。无论初始转换实际上是什么,您都应该假设它是单位化的,并在使用它之前为其分配一个值。

SetTransform

不应该与MultiplyTransform(不存在)之类的东西混淆。您正在设置转换,而不是追加到转换。在 Direct2D 中,由你执行推送/弹出样式的矩阵操作。