D3DXMatrixRotationAxis повернуть не ту ось

Я пишу простое 3D-приложение с DirectX. Я новичок, но я думаю, что понимаю, как работает D3DX Rotation.
при создании функции обнаружения столкновений я замечаю, что мяч отскакивает в неправильном направлении. код должен изменить направление оси, заданное в векторе направления. Вместо этого это меняет 2 других:

speed = D3DXVECTOR3(1.0f, 2.0f, 3.0f);
direction = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
D3DXMATRIX temp;

D3DXMatrixRotationAxis(&temp, &direction, 3.14f);
D3DXVec3TransformCoord(&speed, &speed, &temp);

из точки останова я знаю, что скорость изменилась с 1, 2, 3 до:

  • _D3DVECTOR {x = 0.999999762 y = -2.00477481 z = -2.99681091} _D3DVECTOR

Что я здесь не так делаю? Идея состоит в том, чтобы инвертировать ось, указанную в векторе направления.

1

Решение

Вы создали преобразование вращения 180 вокруг оси X.
Операция над (1,2,3) привела к (1, -2, -3), что вы и указали.

«Отскок» вашего вектора «скорости» S от плоскости, которая имеет нормальное значение N:

angle = acos(S*N);   // provided that * is an operator for D3DXVec3Dot
axis = S^N;          // provided that ^ is an operator for D3DXVec3Cross
D3DXMatrixRotationAxis(&temp, &axis , angle*2);   // angle is *2
D3DXVec3TransformCoord(&S, &S, &temp);
S=-S;                                             // negate direction
0

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

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

По вопросам рекламы [email protected]