Я использую C++. Я видел [here](-here I should add the link-)
код ниже на MSDN:
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
Интересно, почему они умножаются с помощью матрицы идентичности. Это не меняет:
I * A = A
if A * B = C
. I * C = C
, нетC * I = A
, поэтому это не C * I = A
так , но мой друг сказал, что если яSetTransform(identity)
, rendertarget становится начальным состоянием.
Почему они умножаются с помощью матрицы идентичности?
Начальное преобразование может быть нулевым, или это может быть мусор (неинициализированный), или это может быть даже идентичность, но мы не знаем. Поэтому вы должны установить для него значение identity, чтобы знать, что такое преобразование. Независимо от того, что такое начальное преобразование на самом деле, вы должны предположить, что оно является unitialized и присвоить ему значение, прежде чем использовать его.
Я видел здесь, что этот синтаксис должен использоваться, когда нужно удалить текущее преобразование
Они говорят, если у вас есть:
SetTransform
не следует путать с чем-то вродеMultiplyTransform
(чего не существует). Вы задаете преобразование, не добавляя его. В Direct2D, это до вас, чтобы сделать push/pop манипуляции матрицы стиля.