2011-11-20 137 views
0

我目前正在學習DirectX(2010年6月的SDK),並且正在繪製位圖來屏幕。現在我希望能夠對這些圖像進行轉換,並且無法沿着x軸或y軸鏡像圖像。C++ Direct2D矩陣轉換鏡像

在繪製之前,我可以設置一個將應用於繪圖操作的轉換矩陣。儘管DirectX使用D2D1_MATRIX_3x2_F類型,但根據MSDN的說法,該矩陣只有一個2x2部分用於轉換。例如,矩陣{[1,0],[0,1],[0,0]}是使所有內容自然顯示的單位矩陣。根據我的理解,沿x軸鏡像我的圖像的矩陣變換應該如下所示:{[1,0],[0,-1],[0,0]},沿着那麼y軸將是{[-1,0],[0,1],[0,0]}。如果我使用這些矩陣進行轉換,則會出現黑屏。

對於我來說,問題在於,我有點卡在這一點上,沒有想法這個問題可能是由什麼原因造成的,或者說是否是由數學背後的邏輯錯誤或實現本身造成的。不幸的是,除了在Direct2D RenderTarget頭文件中的「鏡像必須用矩陣轉換完成」之外,我還找不到任何材料。

我目前使用的這個測試的源代碼是:

D2D1_MATRIX_3X2_F m; 
m._11 = 1; m._12 = 0; 
m._21 = 0; m._22 = -1; 
m._31 = 0; m._32 = 0; 
m_pDX2DRenderTarget->SetTransform(m); 

回答

0

我完全弄錯了不相關矩陣的第三行。它實際上是用於轉換的x-y-偏移量。我之所以沒有看到任何東西,是因爲在應用鏡子之後,不僅圖像本身將被鏡像,而且其在屏幕上的位置也將被鏡像。

例如,如果我顯示的圖像的頂部左邊緣位於(100, 100),應用x軸鏡像的矩陣變換後,圖像的右上邊緣將位於(-100, 100)。由於這總是在渲染區域之外,所以不會顯示。