Question about camera rotation in Optix advance sample

I am currently reading the code of the optixvox project but I have a problem that how’s the camera_up variable working.

const optix::float3 camera_eye( optix::make_float3( 0.0f, 1.5faabb.extent( 1 ), 1.5faabb.extent( 2 ) ) );
const optix::float3 camera_lookat( aabb.center() );
const optix::float3 camera_up( optix::make_float3( 0.0f, 1.0f, 0.0f ) )

    sutil::Camera camera( WIDTH, HEIGHT, 
            &camera_eye.x, &camera_lookat.x, &camera_up.x,
            context["eye"], context["U"], context["V"], context["W"] );

it seems behave different from the euler angles and has nothing to do with the rotation matrix, but when I change its value, the camera actually rotate?

If someone could kindly answer this question :D

The camera view vector W (from camera eye point to the look-at point) and the up-vector define a plane.
The camera vector V is in that plane, the camera vector U is perpendicular to that plane.
If you rotate the up-vector around the view vector W, the camera will roll.
Beware of gimbal lock. This is not working when W and up-vector are collinear.

The OptiX Introduction presentation explains the pinhole camera setup in the OptiX examples (slide 18).
[url]https://devtalk.nvidia.com/default/topic/998546/optix/optix-advanced-samples-on-github/[/url]

Thank you for your kindly reply. It really solve my problem:D