<< Chapter < Page | Chapter >> Page > |
An environmental light is available,
which is not coming from any particular direction, and whosecolor is specified by the parameters of the activation call
ambientLight()
. A directional light source is set
with the
directionalLight()
, whose parameters
specify color and incoming direction. The method
lights()
activates a default combination of gray
ambient light and directional light, the latter also gray,coming from the frontal direction. It is possible to set a point
light source in a given point of space by the call
pointLight()
. Finally, the method
spotLight()
activates a light beam which can be
controlled in its color, position, direction, aperture, andconcentration around the axis. The exponent
tunes the falloff around the axis:
When hitting a planar surface, a directional light produces
reflected light along several directions, depending on thesurface properties. In the case of perfectly-diffusive (or
Lambertian ) surface, the light radiates evenly from
the surface along all directions, with an intensity that islarger for incident directions closer to the surface normal.
Vice versa, if the surface is perfectly reflecting, light isonly reflected along the direction that is specularly symmetric
(about the surface normal) to the incident direction. In OpenGL,to have some flexibility in defining the illumination, each
source has the three illumination components: ambient, diffuse,and specular. These three components are separately defined and
interact with the respective components that define the surfaceproperties of objects. The colors defined in the methods
directionalLight()
,
pointLight()
, and
spotLight()
define the Lambertian component of
illumination. The
lightSpecular()
specifies the
color of the component of incoming light that is subject tospecular reflection.
In Processing, the properties of surfaces are controlled by
the methods
ambient()
(acting on the ambient
component of incoming lights) and
specular()
(acting on the specular component). The function
shininess()
controls the concentration of the
specularly-reflected beam, by a coefficient that acts similarlyto the exponent of
[link] . The represented
objects can also be considered as sources of light, and they canbe assigned an emission light by the
emmissive()
call. However, the sources defined in this way do not illuminate
the other objects on the scene.
In OpenGL the point, spot, and ambient lights are attenuated with increasing distance, according to themodel
ligthFalloff()
allows to
specify the parameters
,
, and
.
Here, a cube and a
QUAD_STRIP
are positioned in space and
illuminated by a rotating source. Moreover, a soft fixed lightis set. Notice the absence of shadows and the apparent
planarity of surfaces in the
QUAD_STRIP
.
float r;
float lightX, lightY, lightZ;
void setup() {size(400, 400, P3D);
r = 0;ambient(180, 90, 0);
specular(0, 0, 240);lightSpecular(200, 200, 200);
shininess(5);}void draw() {
lightX = 100*sin(r/3) + width/2;lightY = 100*cos(r/3) + height/2;
lightZ = 100*cos(r);background(0,0,0);
noStroke();ambientLight(153, 102, 0);lightSpecular(0, 100, 200);
pointLight(100, 180, 180,lightX, lightY, lightZ);
pushMatrix();translate(lightX, lightY, lightZ);
emissive(100, 180, 180);sphere(4); //Put a little sphere where the light is
emissive(0,0,0);popMatrix();
pushMatrix();translate(width/2, height/2, 0);
rotateX(PI/4);rotateY(PI/4);
box(100);popMatrix();
pushMatrix();translate(width/4, height/2, 0);
beginShape(QUAD_STRIP);vertex(10,13,8);
vertex(13,90,13);vertex(65,76,44);
vertex(95,106,44);vertex(97,20,70);
vertex(109,70,80);endShape();
popMatrix();r+=0.05;
}
Notification Switch
Would you like to follow the 'Media processing in processing' conversation and receive update notifications?