Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du vill utföra flera transformeringar på ett objekt innebär det att kombinera flera transformeringar till en. Det innebär att ta utdata från varje transformeringsmatris och använda den som indata för nästa, och därmed få de kumulativa effekterna av alla matristransformeringar.
Anta att två omvandlingsmatriser, rotation och översättning, multipliceras. Resultatet är en ny matris som utför funktionerna i både rotation och översättning. Eftersom matris multiplikation inte är kommutativ skiljer sig en rotationstransformation multiplicerad med en översättningstransformation från översättningstransformationen multiplicerad med rotationstransformationen.
Följande kodexempel visar hur du tillämpar rotation följt av översättning och sedan översättning följt av rotation. Observera att återgivningsresultaten skiljer sig.
D2D1_RECT_F rectangle = D2D1::RectF(300.0f, 40.0f, 360.0f, 100.0f);
// Draw the rectangle before transforming the render target.
m_pRenderTarget->DrawRectangle(
rectangle,
m_pOriginalShapeBrush,
1.0f,
m_pStrokeStyleDash
);
D2D1_MATRIX_3X2_F rotation = D2D1::Matrix3x2F::Rotation(
45.0f,
D2D1::Point2F(330.0f, 70.0f)
);
D2D1_MATRIX_3X2_F translation = D2D1::Matrix3x2F::Translation(20.0f, 10.0f);
// First rotate about the center of the square and then move
// 20 pixels to the right along the x-axis
// and 10 pixels downward along the y-axis.
m_pRenderTarget->SetTransform(rotation* translation);
// Draw the rectangle in the transformed space.
m_pRenderTarget->FillRectangle(rectangle, m_pFillBrush);
m_pRenderTarget->DrawRectangle(rectangle, m_pTransformedShapeBrush, 1.0f);
D2D1_RECT_F rectangle = D2D1::Rect(40.0f, 40.0f, 100.0f, 100.0f);
// Draw a rectangle without transforming it.
m_pRenderTarget->DrawRectangle(
rectangle,
m_pOriginalShapeBrush,
1.0f,
m_pStrokeStyleDash
);
D2D1_MATRIX_3X2_F translation = D2D1::Matrix3x2F::Translation(20.0f, 10.0f);
m_pRenderTarget->SetTransform(translation);
D2D1_MATRIX_3X2_F rotation = D2D1::Matrix3x2F::Rotation(
45.0f,
D2D1::Point2F(70.0f, 70.0f)
);
// First move 20 pixels to the right along the x-axis and
// 10 pixels downward along the y-axis,
// and then rotate about the center of the original square.
m_pRenderTarget->SetTransform(translation * rotation);
// Draw the rectangle in the transformed space.
m_pRenderTarget->FillRectangle(rectangle, m_pFillBrush);
m_pRenderTarget->DrawRectangle(rectangle, m_pTransformedShapeBrush);
Koden genererar utdata som visas i följande bild.
Relaterade ämnen
-
översikt över Direct2D-transformeringar