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.