как построить матрицу преобразования текстурных координат в Direct3D - PullRequest
0 голосов
/ 20 февраля 2011

Я знаю, что в D3D есть функция, которая преобразует координату текстуры:

d3dDevice->SetTransform( D3DTS_TEXTURE0, &matrix );

Проблема в том, как я могу получить матрицу.Например, у меня теперь есть смещение текстуры, масштаб, поворот и яркость.Как мне установить эту матрицу?

Ответы [ 2 ]

1 голос
/ 20 февраля 2011

Превращает .На этой странице есть ссылки на методы библиотеки утилит D3DX.

0 голосов
/ 13 сентября 2016

Предположим, у вас есть коллекция изображений одинаковой ширины (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);

Надеюсь, это решит вашу проблему. Наслаждайтесь !!!

...