Try this: (You'll need to call this three times, once for Roll, Yaw, and Pitch). This should work, I've used it in my own game, and it has been unit-tested. Of course, if your vector/point class has its overloaded operators defined differently then it may not give similar results. Here is my vector implementation (as of a few months ago).
point3D RotatePointAroundAxis( const point3D& axis, const float radians, const point3D& point ) { float matrix[3][3]; float sn = sinf(radians); float cs = cosf(radians); float xSin = axis.x * sn; float ySin = axis.y * sn; float zSin = axis.z * sn; float oneMinusCS = 1.0f - cs; float xym = axis.x * axis.y * oneMinusCS; float xzm = axis.x * axis.z * oneMinusCS; float yzm = axis.y * axis.z * oneMinusCS; matrix[0][0] = (axis.x * axis.x) * oneMinusCS + cs; matrix[0][1] = xym + zSin; matrix[0][2] = xzm - ySin; matrix[1][0] = xym - zSin; matrix[1][1] = (axis.y * axis.y) * oneMinusCS + cs; matrix[1][2] = yzm + xSin; matrix[2][0] = xzm + ySin; matrix[2][1] = yzm - xSin; matrix[2][2] = (axis.z * axis.z) * oneMinusCS + cs; return point3D ( matrix[0][0] * point.x + matrix[0][1] * point.y + matrix[0][2] * point.z, matrix[1][0] * point.x + matrix[1][1] * point.y + matrix[1][2] * point.z, matrix[2][0] * point.x + matrix[2][1] * point.y + matrix[2][2] * point.z ); }
If you're trying to rotate an entire plane then I suspect you have a rotation matrix, if you're using DirectX you could use something like D3DXMatrixRotationRollYawPitch(&mRotation, rotation.y, rotation.x, rotation.z); I'm not sure if that's the exact function name.