D3D には、テクスチャ座標を変換する関数があることを知っています。
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );
問題は、マトリックスを取得する方法です。たとえば、テクスチャ オフセット、スケール、回転、明るさがあります。そのマトリックスをどのように設定すればよいですか?
変換します。そのページには、D3DX Utility Library メソッドへのリンクがあります。
幅 (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);
これで問題が解決することを願っています。楽しみ !!!