public override void Update() { Matrix4d R = yawPitchRoll(yaw, pitch, roll); Position += translation; //set this when no movement decay is needed //translation=Vector3d(0); CenterOfInterest = R.MultiplyVector3d(new Vector4d(0, 0, 1, 0)); Up = R.MultiplyVector3d(new Vector4d(0, 1, 0, 0)); right = Vector3d.Cross(CenterOfInterest, Up); Vector3d direction = Position + CenterOfInterest; // V = lookAt(Position, tgt, up); V = Matrix4d.LookAt(Position, // Camera is here direction, // and looks here : at the same position, plus "direction" Up); // Head is up (set to 0,-1,0 to look upside-down) // }