Это как правильно рассчитать Vector3 Transform и TransformCoordinate? - PullRequest
0 голосов
/ 30 декабря 2011

Я изучал, как работают функции D3DXVec3Transform и D3DXVec3TransformCoord, мне было интересно, если это правильная математическая схема, если нет, может кто-нибудь объяснить, почему. Я понимаю, что для этого уже есть функции DirectX, однако я пытался больше узнать о математике за кулисами, и из исследований я пришел к этому.

D3DXVECTOR3 Vec3Transform(D3DXVECTOR3 &vCoordinate, D3DXMATRIX &mTransform)
{
    D3DXVECTOR3 vWorking;

    vWorking.x = (vCoordinate.x * mTransform._11) + (vCoordinate.y * mTransform._21) + (vCoordinate.z * mTransform._31) + mTransform._41;
    vWorking.y = (vCoordinate.x * mTransform._12) + (vCoordinate.y * mTransform._22) + (vCoordinate.z * mTransform._32) + mTransform._42;
    vWorking.z = (vCoordinate.x * mTransform._13) + (vCoordinate.y * mTransform._23) + (vCoordinate.z * mTransform._33) + mTransform._43;

    return D3DXVECTOR3(vWorking.x, vWorking.y, vWorking.z);
}

D3DXVECTOR3 Vec3TransformCoordinate(D3DXVECTOR3 &vCoordinate, D3DXMATRIX &mTransform)
{
    D3DXVECTOR4 vWorking;

    vWorking.x = (vCoordinate.x * mTransform._11) + (vCoordinate.y * mTransform._21) + (vCoordinate.z * mTransform._31) + mTransform._41;
    vWorking.y = (vCoordinate.x * mTransform._12) + (vCoordinate.y * mTransform._22) + (vCoordinate.z * mTransform._32) + mTransform._42;
    vWorking.z = (vCoordinate.x * mTransform._13) + (vCoordinate.y * mTransform._23) + (vCoordinate.z * mTransform._33) + mTransform._43;
    vWorking.w = 1 / ((vCoordinate.x * mTransform._14) + (vCoordinate.y * mTransform._24) + (vCoordinate.z * mTransform._34) + mTransform._44);

    return D3DXVECTOR3(vWorking.x * vWorking.w, vWorking.y * vWorking.w, vWorking.z * vWorking.w);
}

1 Ответ

0 голосов
/ 30 декабря 2011

Рассматривая подобные функции в библиотеке D3DX, вы, похоже, добросовестно реализовали их функцию.

Может также помочь иметь функцию, которая преобразует (x, y, z, 0) с помощью матрицы 4x4поскольку это полезно при переводе направлений, таких как скорость объекта или нормаль поверхности.Вектор будет преобразован без применения переводов, что разрушило бы направление.

...