Установка матриц преобразования текстуры

После того как вы получили корректную матрицу 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; таШип->_23 = тапІп->_23; таШип->_24 = 0.0г;

тапОип->_31 = тапІп->_41; // Скопировать нижнюю строчку, тапОип->_32 = тапІп->_42; // используемую для перемещения таШип->_33 = талІп->_43; тапОип->_3 4 = 0.0г;

тап0ип->_41 = 0.0г; // Очистить нижнюю строчку тапОип->_42 = 0.0г; тапОип->_43 = 0.0г; таШип->_44 = 1.0г;

}

Вызов функции Маггіх4х4То3х3 происходит так же просто, как и вызов любой функции Б3БХ для работы с матрицами. Все, что вам необходимо, это предоставить указатель на результирующую матрицу, как я сделал тут. (Заметьте, что исходная и результирующая матрицы могут быть одинаковыми.)

// Преобразовать матрицу в матрицу 3x3 Мапгіх4х4То3х3(&тапТехпиге, ЬтапТехбиге) ;

После того как вы задали в качестве параметра функции Маггіх4х4То3х3 матрицу преобразования текстуры, вы можете установить результирующую матрицу 3х3 преобразования текстуры, используя функцию ГОкес13ВВеугсе9::Ве1Тгашгоггп, установив флаг В3ВТ8_ТЕХТиЯБ0.

// Установить преобразование в конвейер Пігесп3П рПеуісе->8епТгапвгогт(П3иТ8_ТЕХТІШЕ0, ЬтабТехбиге);

На данный момент БкеСЗБ почти готов к преобразованию текстур! Единственное, что осталось сделать, это сообщить БкеСЗБ, что при вычислении преобразований используются двухмерные координаты текстуры. Вы можете сделать это следующим вызовом ГОігесі3ВБеуісе9::8еіТехшге8іа§е8іа1е:

рПеуісе->8епТехпиге8паде8папе(0,

П3иТ88_ТЕХТиПЕТПАПТ8ЕОПМЕЕАС8, Б3БТТРР_СОШТ2);

Вот теперь все готово! С этого момента к каждой визуализируемой текстуре (нулевого уровня) будет применяться преобразование. После того как вы обработаете все текстуры, вы можете отключить преобразования, вызвав 8еіТехшге8іа§е8Ше, но на этот раз установив В3ВТ88_ТЕХШКЕТКАК8ЕОКМЕ1А08 в В3ВТТЕЕ_В18АВЬЕ.

pDevice->SetTextureStageState(0,

В3ВТЗЗ_ТЕХТикЕТкАыЗР0кМРЬА03, D3DTTFF_DISABLE);

Замечание. Показанный здесь код позволяет использовать преобразования текстур только в нулевом уровне. Если вы используете текстуры другого уровня, просто замените 0 на используемый уровень.

Создание преобразования текстур || Оглавление || Использование преобразования текстур в проектах