Original Post
I'm at a loss for the proper terminology to use here, so please bear with me. I want to update the world position of a vertex based on a velocity given in world space, but applied to a camera space basis. What I mean is, say my world space velocity is (0,100,0), I want to be able to transform my vertex along the "up" vector of my camera (given in world space) by 100. Or, if I pass in (100, 50, 0) in world space, I want to translate along my camera's "up" vector by 50 and along its "right" vector by 100, but the result should be in world space. This is the code I've come up with, and it seems to work, but I'm wondering if there is an existing operation to do this, or what this technique is called.
//camera normalized Z
this.cameraView.Normalize();
//normalized X
Vector3 camNormalizedRight = Vector3.Cross(this.cameraView, this.cameraUp);
camNormalizedRight.Normalize();
//normalized Y
Vector3 camNormalizedUp = Vector3.Cross(camNormalizedRight, this.cameraView);
camNormalizedUp.Normalize();
Vector3 upPart = cParticle.Velocity.Y * camNormalizedUp;
Vector3 rightPart = cParticle.Velocity.X * camNormalizedRight;
Vector3 zPart = cParticle.Velocity.Z * this.cameraView;
Vector3 particleVel = upPart + rightPart + zPart;