Как построить матрицу преобразования текстурных координат в Direct3D
Я знаю, что в D3D есть функция, которая преобразует координату текстуры:
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );
Проблема в том, как я мог получить матрицу. Например, у меня теперь есть смещение текстуры, масштаб, поворот и яркость. Как мне установить эту матрицу?
2 ответа
Превращает На этой странице есть ссылки на методы библиотеки утилит D3DX.
Предположим, у вас есть коллекция изображений одинаковой ширины (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: Установите текстуру Stage 0
device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Надеюсь, что это решит вашу проблему. Наслаждаться!!!