Читать книгу Processing - Tomás Domínguez Mínguez - Страница 34
4.7.3 ILUMINACIÓN
ОглавлениеHasta ahora, las figuras que ha dibujado en 3D no tenían rellenas las caras de ningún tipo de textura ni color. Aparecía solo su «armazón», pero, ¿qué pasaría si se cubriera con una capa de color? Haga la prueba con el cubo, sustituyendo en el código anterior la sentencia nofill() por:
El primer comando evita que se pinte el «esqueleto» del que se hablaba anteriormente, mientras que el segundo recubre el cubo de color gris. El resultado se puede apreciar a continuación.
Como puede ver, su aspecto es realmente triste y sin ningún atisbo de tridimensionalidad. El motivo es porque el cubo aparece iluminado por una luz homogénea, plana. Recuperemos una iluminación adecuada. Por supuesto, del mismo modo que dibujar en 3D es una ilusión, iluminar también formaría parte de dicha ilusión.
La manera más fácil de iluminar algo en Processing es con el comando:
Dicho comando ofrece una iluminación por defecto muy útil cuando no se requieren efectos especiales. Vea el resultado de añadir la función lights() al código anterior.
Este sería el código con todos los cambios realizados hasta el momento:
Si lo que quiere es personalizar el tipo de luz a emplear puede elegir entre:
* ambientLight(). Genera una luz ambiental que no proviene de ninguna dirección específica, iluminando los objetos de manera uniforme.
* directionalLight(). Genera una luz que proviene de una dirección concreta. Su nivel será mayor cuando incide sobre una superficie de forma perpendicular y más débil si lo hace en un ángulo más suave.
* spotLight(). Es similar a una luz direccional, pero permite un mayor grado de control del efecto de iluminación.
* pointLight(). Genera una luz puntual obtenida de foco con un cono de 180 grados.
No se va a entrar en detalles sobre la utilización de estos comandos, por lo que animo a todo aquel que esté interesado a que acuda a la documentación de referencia de Processing. Únicamente, a título ilustrativo, y solo por mostrar el enorme potencial de esta funcionalidad, en la siguiente imagen se puede apreciar el resultado de sustituir en el programa anterior el comando box(150) por sphere(150) y lights() por directionalLight(255, 0, 0, 1, -1, 0);
NOTA. Las tres primeras coordenadas del comando directionalLight() representan el color de la luz. Las tres últimas son las coordenadas x, y, z de la dirección de la que procede.
NOTA. Se ha eliminado la sentencia fill() del código original para dar un color más vivo a la imagen.