P3D: Ejemplos de Funciones
Podemos agrupar expresiones que construyen objetos en forma de funciones, ya sea con o sin parámetros.
Recuerda declarar las funciones fuera de setup()
y de draw()
. No olvides llamarlas cuando desees utilizarlas.
1 Funciones con figuras básicas
1.1 Escalinata
Tomando el primer ejemplo de las notas de repetición
Podemos identificar que una estructura en forma de escalinata consiste en múltiples cajas desplazadas en dos dimensiones.
Estas dos expresiones repetidas múltiples veces resultan en una estructura de ese tipo:
box(ancho, huella, peralte);
translate(0, huella, peralte);
Un ciclo for
que dibuja 10 cajas de este tipo se vería así:
for( int n=1; n<=10; n=n+1){
box(ancho, huella, peralte);
translate(0, huella, peralte);
}
1.1.1 Sin parámetros
Ese bloque de código puede ir dentro de una función escalinata()
, que siempre dibujará 10 escalones:
void escalinata() {
// dibuja 10 escalones
float ancho = 2; // (en X)
float huella = 0.3; // (en Y)
float peralte = 0.2; // (en Z)
pushMatrix();
for( int n=1; n<=10; n=n+1){
box(ancho, huella, peralte);
translate(0, huella, peralte);
}popMatrix();
}
Nota el uso de pushMatrix()
y popMatrix()
para que las transformaciones realizadas no afecten nada más en el código.
Podemos llamar esa función desde draw()
, transformándola si queremos para dibujar múltiples:
escalinata(); // dibuja escalinata
translate( 4, 0, 0 ); // traslada 4 unidades a la "derecha"
escalinata(); // dibuja otra escalinata
1.1.2 Con parámetros
Podemos tener más flexibilidad con funciones que tengan parámetros.
Por ejemplo, una función de dibujo escalinata( )
con dos parámetros: el número de escalones, y el ancho del escalón:
void escaleras(int numeroEscalones, float ancho){
float huella = 0.3; // (en Y)
float peralte = 0.2; // (en Z)
for(int n=1; n<=numeroEscalones; n=n+1 ) {
box(ancho, huella, peralte);
translate(0, huella, peralte);
} }
Nota cómo el ciclo for
ahora tiene el parámetro numeroEscalones
en vez del 10 literal.
Al llamar la función hemos de especificar los parámetros, ya sea con literales o con variables.
escalinata( 30, 2.5 ); // dibuja escalinata de 30 escalones de 2.5 unidades de ancho
Practica modificando la función para que todas las dimensiones sean parámetros de la función.
2 Funciones con mallas propias
Revisa previamente las notas sobre mallas propias
2.1 Plano
Esta función dibuja un plano cuadrado de lado
unidades, centrado en el origen y sobre el plano XY
void plano(float lado) {
beginShape(QUADS);
vertex(lado/2, -lado/2);
vertex(lado/2, lado/2);
vertex(-lado/2, lado/2);
vertex(-lado/2, -lado/2);
endShape();
}
Para llamarla:
plano( 10 ); // dibuja plano de 10 unidades de lado