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

0

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

        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); то объект отлично отображает, но, конечно, не преобразуется...

EDIT: Кроме того, 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 не очень помог)

Теги:
directx
d3dx

1 ответ

0

EDIT: D3DXVec3TransformCoordArray в этом случае параметры шага должны быть размером D3DXVECTOR3. Попробуйте передать в матрицу D3DXVec3TransformCoordArray transM вместо posM, если вы хотите повернуть и перевести.

  • 0
    О, да, это должен быть transM вместо posM, но я хотел знать, работает ли он хотя бы только с позицией, и забыл изменить его обратно. Я отредактирую это. Уверены насчет параметров 2 и 4? MSDN говорит иначе. Я попытался изменить их на 3, но это не помогло. Выглядит еще хуже ^^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню