Я пытаюсь позиционировать и вращать треугольники с 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 не очень помог)
EDIT: D3DXVec3TransformCoordArray в этом случае параметры шага должны быть размером D3DXVECTOR3. Попробуйте передать в матрицу D3DXVec3TransformCoordArray transM вместо posM, если вы хотите повернуть и перевести.