Я изучал, как работают функции D3DXVec3Transform и D3DXVec3TransformCoord, задаваясь вопросом, правильно ли это математика, если нет, может кто-то объяснить, почему. Я понимаю, что для этого уже есть функции DirectX, однако я пытаюсь узнать больше о математике за кулисами и от исследований, к которым я пришел.Правильно ли вы вычисляете преобразование Vector3 и TransformCoordinate?
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);
}
D3DXMATRIX - это матрица 4x4, что изменит ваше мнение о ответе? – judeclarke