DirectX Matrix преобразование

Я пытаюсь расположить и повернуть треугольники с помощью D3DXVec3TransformCoordArray и мировой матрицы, но когда я рисую преобразованные треугольники, они ужасно искажаются. Что я делаю неправильно? (Кстати. Мне нужно сделать это на процессоре, это не для целей рисования …)

        D3DXVECTOR3 tri[3];
tri[0] = mbuffer.vertices[mbuffer.indices[x]].position;
tri[1] = mbuffer.vertices[mbuffer.indices[x + 1]].position;
tri[2] = mbuffer.vertices[mbuffer.indices[x + 2]].position;
D3DXMatrixRotationQuaternion(&rotM, &obj->getRotation());
D3DXMatrixTranslation(&posM, obj->getPosition().x, obj->getPosition().y, obj->getPosition().z);
transM = rotM * posM;
D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);

Когда я закомментирую последнюю строку D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3); тогда объект рендерит нормально но, конечно, не трансформируется …

РЕДАКТИРОВАТЬ:
Также, obj->getPosition() а также obj->getRotation() верните правильные значения.

EDIT2:
Хорошо, похоже,

D3DXVec3TransformCoord(&tri[0], &tri[0], &transM);
D3DXVec3TransformCoord(&tri[1], &tri[1], &transM);
D3DXVec3TransformCoord(&tri[2], &tri[2], &transM);

вместо

D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);

решает проблему.

Может кто-нибудь сказать мне, как использовать D3DXVec3TransformCoordArray должным образом? (MSDN не очень помог)

0

Решение

РЕДАКТИРОВАТЬ: D3DXVec3TransformCoordArray в этом случае параметры шага должны иметь размер D3DXVECTOR3.
Попробуйте передать в матрицу transM D3DXVec3TransformCoordArray вместо posM, если вы хотите повернуть и перевести.

0

Другие решения

Других решений пока нет …