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 не очень помог)

1 ответ

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

Другие вопросы по тегам