<< Chapter < Page | Chapter >> Page > |
ellipse()
draws an ellipse in the 2D plane. Its
four parameters are interpreted, as in the case of
rect()
, as position followed by width and
height. The position can be set in different ways according tothe
ellipseMode()
, whose parameter can take
values
CORNER, CORNERS, CENTER,
CENTER_RADIUS
. The first couple of these possible
values have to be referred to the rectangle that iscircumscribed to the ellipse.
Processing offers a very limited repertoire of 3D-object primitives, essentially onlyballs and boxes.
box()
produces a cube when invoked
with a single parameter (edge), a parallelepiped when invokedwith three parameters (width, height, depth).
sphere()
produces, by an approximating
polyhedron, a sphere whose radius is specified as aparameter.The function
sphereDetail()
can be used
to specify the number of vertices of the polyhedron thatapproximates the ideal sphere.
A rotation or a translation can be imagined as operations that
rotate or translate the Cartesian reference system. In otherterms, after a
rotate()
or a
translate()
the following positioning operations
of the objects will have a new coordinate system. When variousobjects are positioned in different ways in space, it is
useful to keep trace of the coordinate systems that are set,one after the other. The data structure that is suited for
containing such systems is the stack of transformations(
matrix stack ). With the function
pushMatrix()
the current coordinate system is put
on top of the stack. On the other hand, to revert to thecoordinate system before the last transformation, we have to
call a
popMatrix()
. Actually, the stack contains
the affine transformation matrices, according to what isdictated by
OpenGL and described in
[link] .
In this example two objects are positioned in the 3D space: a
planar square and a cube. The first
pushMatrix()
saves
the coordinate system onto the stack, then sometransformations are applied, and finally the square is
drawn. To go back to the previous coordinate system and applynew transformations to position the cube, we apply a
popMatrix()
. Essentially, the
pushMatrix()
and
popMatrix()
determine the
scope for the geometric positioning of an object.
float angle;
void setup(){size(100, 100, P3D);
int angle = 0;}
void draw(){background(200);
angle += 0.003;pushMatrix();
translate(25,50);rotateZ(angle);
rotateY(angle);rectMode(CENTER);
rect(0,0,20,20);popMatrix();
translate(75,50,-25);rotateX(angle);
box(20);}
The Processing lighting model echoes the model used in OpenGL , that is the Phong reflection model . Such model is not physically justified, but it is particularly efficient. OpenGL considers as illuminated eachpolygon whose normal forms an acute angle with the direction of incoming light. This happens regardless of any maskingobjects. Therefore, shadows are not cast. OpenGL is said to use a local illumination model, since multiple reflections amongsurfaces and cast shadows are not automatically rendered.
Notification Switch
Would you like to follow the 'Media processing in processing' conversation and receive update notifications?