0

D3D には、テクスチャ座標を変換する関数があることを知っています。

d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );

問題は、マトリックスを取得する方法です。たとえば、テクスチャ オフセット、スケール、回転、明るさがあります。そのマトリックスをどのように設定すればよいですか?

4

2 に答える 2

1

変換します。そのページには、D3DX Utility Library メソッドへのリンクがあります。

于 2011-02-20T14:32:37.080 に答える
0

幅 (txFullWidth) と高さ (txFullHeight) のテクスチャ アトラスに同じ幅 (txTxWidth) と高さ (txTxHight) の画像のコレクションがあるとします。

ステップ 1: テクスチャ アトラスの画像セルと同じサイズの 4x4 スケール マトリックスを構築します。

D3DXMatrixScaling(&matScale, txTxWidth/txFullWidth, txTxHeight/txFullHeight, 1.0f);

ステップ 2: (x,y) オフセットと画像セルの幅と高さを使用して 4x4 の平行移動行列を作成する

   D3DXMATRIX matTrans;
   matTrans._13 = x / txFullWidth; // X origin
   matTrans._23 = y / txFullHeight; // Y origin
   matTrans._31 = txTxWidth / txFullWidth;  // Width;   
   matTrans._32 = txTxHeight / txFullHeight; // Height

ステップ: 4: 翻訳行列を転置することを忘れないでください

   D3DXMATRIX trpos_matTrans;
   D3DXMatrixTranspose(&trpos_matTrans,&matTrans);

ステップ 3: 要件に従って 4x4 回転行列を作成します。

 D3DXMatrixRotationX(&matRot, D3DXToRadian(0.0f));

ステップ 4: 乗算

 matix = matScale * matRot * trpos_matTrans ; // SRT

ステップ 5: テクスチャ トランスフォームを設定する

device->SetTransform(D3DTS_TEXTURE0, &matrix);

ステップ 6: テクスチャ ステージ 0 を設定する

device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS,   D3DTTFF_COUNT2);

これで問題が解決することを願っています。楽しみ !!!

于 2016-09-13T17:26:21.033 に答える