You cannot rotate a direction by adding x,y,z to it (how do you specify rotation by x,y,z anyway?). Direction should generally be unit length. Use Quaternions to rotate a direction vector (maybe you need to read up on rotation in 3D space first).
I was thinking of it more as rotation around that specific axis, specified in degrees/radians/etc - that's why I couldn't figure out why the rotation wasn't equal for each unit added. I'll read up on quaternions though, thanks for the help.
Well after a bit of reading on quats I came up with this alternative, which seems to work:
public void RotateCamera(float Degrees)
{
// Get current camera angles/axis
Vector3f tmpVec = new Vector3f();
float tmpAngle = CamQuat.toAngleAxis(tmpVec) * FastMath.RAD_TO_DEG;
// Set new values...
tmpAngle += Degrees;
if (tmpAngle > 360)
{
tmpAngle -= 360;
}
else if (tmpAngle < 0)
{
tmpAngle += 360;
}
I still don't quite understand how myCam.setDirection works though - since it seems that you would be passing it a Vector3f defining an axis, which is fairly useless without w, the angle. I guess that brings me back to your question - how do you specify rotation with x,y,z (a Vector3f)?