2016-12-31 6 views
0

저는 C++을 사용하고 있습니다. 나는 MSDN에 [here](-here I should add the link-) 코드 아래 보았다 : 그들은 행렬에 거는 이유Direct2D에서 단위 행렬을 사용하는 곱셈 - 왜?

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

궁금. 변경되지 않습니다. I * A = AA * B = C 인 경우. I * C = C이 아니고 C * I = A이 아니므로 이 아니지만 친구 인 경우 SetTransform(identity)이면 렌더링 대상이 초기 상태가됩니다.

왜 그들은 단위 행렬과 곱 해 집니까?

+0

당신이 시도한 것을 보여주십시오. 귀하의 출처는 ... 다음 질문을하기 전에 [ask]를주의 깊게 읽으십시오. –

답변

0

초기 변환은 0 일 수도 있고 가비지 (초기화되지 않음) 일 수도 있고, 신원 일 수도 있지만 우리는 알지 못합니다. 변환을 식별 할 수 있도록 ID로 설정해야합니다. 초기 변환이 실제로 무엇인지에 관계없이 사용하기 전에 단위 화되어 값을 할당한다고 가정해야합니다.

+0

저는 초기 변환이 아이덴티티인지 확실히 확신합니다. 그렇지 않으면 항상 변환을 설정해야합니다 (대부분의 응용 프로그램은 그렇지 않을 것입니다). 그렇지 않으면 드로잉이 엉망이 될 것입니다. – user1610015

0

나는이 구문은 하나가 전류를 제거하려면 하고자 할 때 변환 사용되는 here 보았다

당신이있는 경우에 그들은 말 :

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

에 적용되는 변환 SetTransform에 다시 전화 할 때까지 모든 후속 그리기 작업. 현재 변환을 제거하려면 Matrix3x2F::Identity 함수가 반환하는 항등 행렬을 사용하여 SetTransform을 호출하십시오.

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

SetTransform은 (존재하지 않는) MultiplyTransform 같은과 혼동해서는 안된다. 설정을 변환에 추가하지 않습니다. Direct2D에서는 push/pop 스타일의 행렬 조작을 할 수 있습니다.