Предположим, у вас есть коллекция изображений одинаковой ширины (txTxWidth) и высоты (txTxHight) в текстурном атласе ширины (txFullWidth) и высоты (txFullHeight).
шаг 1. Построить матрицу масштаба 4x4 размером с ячейку изображения в текстурном атласе.
D3DXMatrixScaling(&matScale, txTxWidth/txFullWidth, txTxHeight/txFullHeight, 1.0f);
шаг 2. Построить матрицу перевода 4x4, используя смещение (x, y), ширину и высоту ячейки изображения
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);
Надеюсь, это решит вашу проблему. Наслаждайтесь !!!