Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir nesne üzerinde birden çok dönüşüm gerçekleştirmek, birkaç dönüşümü tek bir dönüşümde birleştirmek anlamına gelir. Başka bir ifadeyle, her dönüştürme matrisinden çıkışı alıp sonrakinin girişi olarak kullanarak tüm matris dönüşümlerinin kümülatif etkilerini elde eder.
Döndürme ve çeviri gibi iki dönüştürme matrislerinin birlikte çarpıldığını varsayalım. Sonuç, hem döndürme hem de çeviri işlevlerini gerçekleştiren yeni bir matristir. Matris çarpımı değişmeli olmadığından, çeviri dönüşümüyle çarpılan rotasyon dönüşümü, çeviri dönüşümünün rotasyon dönüşümüyle çarpılmasından farklıdır.
Aşağıdaki kod örnekleri, önce döndürmenin ardından taşıma, ve ardından taşımadan sonra döndürmenin nasıl uygulanacağını gösterir. İşleme sonuçlarının farklı olduğuna dikkat edin.
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);
Kod, aşağıdaki çizimde gösterilen çıkışı oluşturur.
İlgili konular