float3 v;
v.x = ( ( ( 2.0f * MousePos.x ) / sWidth ) - 1 ) / Camera->ProjMatrix._11;
v.y = -( ( ( 2.0f * MousePos.y ) / sHeight ) - 1 ) / Camera->ProjMatrix._22;
v.z = 1.0f;
XMMATRIX ViewMatrix = ConvertToXM(Camera->ViewMatrix);
XMMATRIX m = XMMatrixInverse(NULL, ViewMatrix);
// Transform the screen space pick ray into 3D space
float3 rayOrigin,rayDir;
rayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
rayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
rayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
rayOrigin.x = Camera->CameraPosition.x;
rayOrigin.y = Camera->CameraPosition.y;
rayOrigin.z = Camera->CameraPosition.z;
// x and z position when y is 0
float y = rayOrigin.y/rayDir.y;
ProjectedMousePos.x = (-rayDir.x*y + rayOrigin.x);
ProjectedMousePos.z = (rayDir.z*y + rayOrigin.z);
ProjectedMousePos.y = 0;
How are you meant to handle camera rotation when picking?