9.7.3  ¿Cómo hago un bucle while?

Depende de lo que esté tratando de hacer.

El uso más común es su utilización como bucle "for" sencillo, esto es, un bucle que se repite cierto número de veces (por ejemplo 10 veces) con un índice de valor para valores sucesivos (por ejemplo 1, 2, 3, ...,10).

Para esto necesitará declarar primero su identificador de índice con el primer valor. Por ejemplo:

#declare Index = 1;

Ahora quiere que se repita 10 veces. Recuerde como trabajaba la condición: El bucle "while" se repite siempre y cuando la condición es verdadera. Entonces se debería repetir hasta que nuestro identificador 'Index' sea menor o igual a 10:

#while(Index <= 10)

Cuando Index llega al valor 11 finaliza el loop, como se espera.

Ahora sólo tenemos que añadir 1 al 'Index' en cada loop, y lo hacemos al final del loop, obteniendo:

#declare Index = 1;
#while(Index <= 10)

(algunos comandos aqui)

#declare Index = Index + 1;
#end

El incremento antes de #end es importante. Si no lo hacemos, 'Index' siempre tendría el valor 1 y el loop se repetiría hasta el infinito puesto que 1 es siempre menor o igual a 10.

¿Qué pasa aqui?

  1. Primero POV-Ray asigna el valor de 1 al 'Index'.
  2. Luego ve la declaración #while y evalúa lo que hay entre los paréntesis: Index <= 10
  3. Como 'Index' tiene el valor de 1 y 1 es menor que 10, la condición se evalúa como verdadera.
  4. Entonces, contiúa normalmente. Ejecuta el comando que le sigue a la declaración #while (que se denota en el ejemplo anterior como "(algunos comandos aqui)").
  5. Entonces llega normalmente al último comando #declare del bloque. Esto hace que el valor 2 se le asigne a 'Index'.
  6. Ahora llega al comando #end y por eso salta hasta el #while.
  7. Despuës ejecuta los pasos desde el 2 al 6 otra vez porque 2 es también menor o igual a 10.
  8. Después que esto ha sido hecho 10 veces, el valor 11 es asignado a 'Index' en el último comando del bloque.
  9. Ahora, cuando POV-Ray evalúa la condición ve que es falsa (porque 11 no es menor ni igual que 10). Esto hace que POV-Ray salte al comando depués de la declaración #end.
  10. El efecto neto de todo esto es que POV-Ray hizo el loop 10 veces y que la variable 'Index' obtuvo valores sucesivos de 1 a 10 en el camino.

Si lee cuidadosamente la descripción anterior, notará que las repeticiones se ha hecho de una manera bastante "tonta", esto es, que no hay ninguna lógica elevada escondida dentro de la estructura del bucle. De hecho, POV-Ray no tiene la más ligera idea de cuántas veces se ejecuta el bucle ni que variable se usa para contar las repeticiones. Sólo sigue órdenes.

La lógica mayor en este tipo de bucles está en la combinación de comandos que escribimos. El efecto de esta combinación es que el bucle trabaja como un bucle "for" sencillo en la mayoría de los lenguajes de programación (como BASIC, etc).