После того как вы получили корректную матрицу D3DXMATRIX, содержащую все преобразования, вы можете визуализировать преобразованную текстуру. Однако сначала необходимо преобразовать матрицу 4x4 в матрицу 3x3, которая используется Direct3D для преобразования текстур. Это может сделать небольшая функция, как например эта:
void Matrix4x4To3x3(D3DXMATRIX *matOut, D3DXMATRIX *matIn) {
matOut->_11 = matIn->_11; // Скопировать первую строчку matOut->_12 = matIn->_12; matOut->_13 = matIn->_13; matOut->_14 = 0.0f;
тас(Хіс->_21 = тасІгі->_21; // Скопировать вторую строчку таиОііи->_22 = таиІп->_22; matOut->_23 = таиІп->_23; matOut->_24 = 0.0Г;
matOut->_31 = таМп->_41; // Скопировать нижнюю строчку, таШи^>_32 = таМп->_42; // используемую для перемещения таШи^>_33 = таМп->_43; matOut->_3 4 = 0.0Г;
mat0ut->_41 = 0.0г; // Очистить нижнюю строчку matOut->_42 = 0.0Г; matOut->_43 = 0.0г; matOut->_44 = 1.0Г;
}
Вызов функции Маггіх4х4То3х3 происходит так же просто, как и вызов любой функции Б3БХ для работы с матрицами. Все, что вам необходимо, это предоставить указатель на результирующую матрицу, как я сделал тут. (Заметьте, что исходная и результирующая матрицы могут быть одинаковыми.)
// Преобразовать матрицу в матрицу 3x3 Ма^іх4х4То3х3(&та^ех^ге, &та^ех^ге) ;
После того как вы задали в качестве параметра функции Маггіх4х4То3х3 матрицу преобразования текстуры, вы можете установить результирующую матрицу 3х3 преобразования текстуры, используя функцию ГОігесі3ВВеуісе9::ВеіТгашгогт, установив флаг В3ВТ8_ТЕХТиЯБ0.
// Установить преобразование в конвейер Біге^3П pDevice->SetTransform(D3DTS_TEXTURE0, &та^ех^ге) ;
На данный момент БкеСЗБ почти готов к преобразованию текстур! Единственное, что осталось сделать, это сообщить БкеСЗБ, что при вычислении преобразований используются двухмерные координаты текстуры. Вы можете сделать это следующим вызовом ГОігесі3ВБеуісе9::ВеіТехйіге8іа§е8іа1е:
pDevice->SetTextureStageState(0,
D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Вот теперь все готово! С этого момента к каждой визуализируемой текстуре (нулевого уровня) будет применяться преобразование. После того как вы обработаете все текстуры, вы можете отключить преобразования, вызвав 8еіТех1ше8іа§е8іа1е, но на этот раз установив В3ВТ88_ТЕХШКЕТКАК8ЕОКМЕІА08 в В3ВТТЕЕ_В18АВЬЕ.
pDevice->SetTextureStageState(0,
В3ЭТ88_ТЕХТиКЕТКАЫ8Р0КМРЬА08, D3DTTFF_DISABLE);
Замечание. Показанный здесь код позволяет использовать преобразования текстур только в нулевом уровне. Если вы используете текстуры другого уровня, просто замените 0 на используемый уровень.
⇐Создание преобразования текстур || Оглавление || Использование преобразования текстур в проектах⇒