1

私は現在DirectX(2010年6月のSDK)を学習しており、画面にビットマップを描画しています。ここで、これらの画像に対して変換を実行できるようにしたいのですが、x軸またはy軸に沿って画像をミラーリングできません。

描画する前に、描画操作に適用される変換行列を設定できます。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のヘッダーファイルに「ミラーリングは行列変換を使用して実行する必要がある」という1行のコメント以外に、これに関する資料は見つかりませんでした。

これをテストするために現在使用しているソースコードは次のとおりです。

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 );
4

1 に答える 1

0

マトリックスの 3 行目が関連していないことについて、私は完全に誤解していました。実際にはx-y-変換のオフセットです。変換後に何も表示されなかった理由は、ミラーを適用した後、画像自体だけでなく、画面上の位置もミラーリングされるためです。

たとえば、左上端が になるように画像を表示する(100, 100)と、x 軸ミラーの行列変換を適用した後、画像の右上端は になります(-100, 100)。これは常にレンダリング領域の外にあるため、表示されません。

于 2011-11-21T02:26:01.710 に答える