Documentation Center

  • Trial Software
  • Product Updates

CameraCoordinates

Position of light sources relative to the camera?

Value Summary

InheritedFALSE, or TRUE

Graphics Primitives

ObjectsCameraCoordinates Default Values
plot::DistantLight, plot::PointLight, plot::SpotLightFALSE

Description

With CameraCoordinates = FALSE, the coordinates defining the position of a light are interpreted as model coordinates in 3 space. Thus, the lights are positioned relative to the objects in the scene. They do not move when the camera moves.

With CameraCoordinates = TRUE, these coordinates are interpreted as "camera coordinates". Thus, the lights are attached to the camera and move automatically with the camera when it is moved.

A vector (x, y, z) in "camera coordinates" has to be interpreted as follows:

The x-coordinate refers to the horizontal axis of the picture that you see in the finder of the camera. Positive x values are to your right hand side, negative x values to your left hand side.

The y-coordinate refers to the vertical axis of the picture that you see in the finder. Positive y values are above you, negative y values below you.

The z-coordinate refers to the position along the optical axis of the camera. Positive z values refer to points in front of you, negative z values to points behind you.

In camera coordinates, the camera position is (0, 0, 0).

For example, a point light positioned at the point (0, 1, 0) in camera coordinates is a "head lamp" fixed at a distance of 1 above the camera.

A 3D plot may contain several cameras. Changing the state of CameraCoordinates for a light affects its relation to all cameras of a scene. With CameraCoordinates = TRUE, the position of the light in 3 space changes, when a new camera is chosen interactively.

Examples

Example 1

We define a sphere:

sphere := plot::Spherical(
    [1, u, v], u = 0..2*PI, v = 0..PI,
    FillColorType = Functional,
    FillColorFunction = 
        proc(u, v) begin
          [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0]
        end_proc):

We define sunlight shining from above:

sunlight := plot::DistantLight([0, 0, 1], [0, 0, 0]):
plot(sphere, sunlight):

Next, the sunlight is defined relative to the camera. In camera coordinates, "above the camera" is given by the Position[0, 1, 0]. Because the camera points downwards, we set the direction of the sunlight "behind" the camera as well by choosing the direction [0, 1, -1.5] w.r.t. the camera:

sunlight := plot::DistantLight([0, 1, -1.5], [0, 0, 0],
                               CameraCoordinates = TRUE):
plot(sphere, sunlight):

delete sphere, sunlight, pointlight:

Example 2

We define the same sphere as in the previous example:

sphere := plot::Spherical(
    [1, u, v], u = 0..2*PI, v = 0..PI,
    FillColorType = Functional,
    FillColorFunction = 
        proc(u, v) begin
          [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0]
        end_proc):

We define an animated camera. First, we use sunlight fixed in space:

camera := plot::Camera([-3*sin(a), -3*cos(a), 2],
                       [0, 0, 0], 0.3*PI, a = 0..2*PI):
sunlight:= plot::DistantLight([0, -2, 3], [0, 0, 0]):
plot(sphere, camera, sunlight):

Next, we use sunlight moving with the camera:

sunlight:= plot::DistantLight([0, 3, -2], [0, 0, 0],
                              CameraCoordinates = TRUE):
plot(sphere, camera, sunlight):

We define a point light that is fixed to some point above the camera:

pointlight := plot::PointLight([0, 1, 0], 
                               CameraCoordinates = TRUE):
plot(sphere, camera, pointlight):

delete sphere, camera, sunlight, pointlight:

Example 3

We define the same sphere as in the previous examples:

sphere := plot::Spherical(
    [1, u, v], u = 0..2*PI, v = 0..PI,
    FillColorType = Functional,
    FillColorFunction = 
        proc(u, v) begin
          [(2 + cos(2*u))/3, (2 + sin(2*u))/3, 0]
        end_proc):

We define an animated point light that is positioned below the camera initially. It moves to some point above the camera during the animation:

pointlight := plot::PointLight([0, 10*a, 0], a = -1..1,
                               CameraCoordinates = TRUE):
plot(sphere, pointlight):

We define an animated point light that is positioned to the left of the camera initially. It moves to the right of the camera:

pointlight := plot::PointLight([10*a, 0, 0], a = -1 .. 1,
                               CameraCoordinates = TRUE):
plot(sphere, pointlight):

delete sphere, pointlight:

See Also

MuPAD Functions

Was this topic helpful?