Математически проецируя вектор a на вектор b: p = (a * (b / | b |)) * (b / | b |). Что касается кода, я даже не знаю, на каком языке вы пишете. Во всяком случае,единственная разница может заключаться в использовании указателей или объектов.
D3DXVECTOR3 *a; //input
D3DXVECTOR3 *b; //input
D3DXVECTOR3 *tmpVec; //create new temporary vector I guess
D3DXVec3Normalize(tmpVec, b); //tmpVec becomes normalized b vector
D3DXVECTOR3 *p = tmpVec*D3DXVec3Dot(a, tmpVec); //result
Надеюсь, это поможет ..