Я пытаюсь расположить и повернуть треугольники с помощью 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 не очень помог)
РЕДАКТИРОВАТЬ: D3DXVec3TransformCoordArray в этом случае параметры шага должны иметь размер D3DXVECTOR3.
Попробуйте передать в матрицу transM D3DXVec3TransformCoordArray вместо posM, если вы хотите повернуть и перевести.
Других решений пока нет …