Iluminación

Las escenas que dibujas con las funciones anteriores parecen bastante planas porque no hay luz alguna. El color si las caras son iguales, independiente de su orientación. Para crear escenas que luzcan más realistas debes permitir la iluminación y poner las luces en los sitios correctos. La creación de escenas correctamente alumbradas no es fácil pero el efecto es muy bueno.

 

Para permitir la iluminación puedes usar la función siguiente;

 

d3d_set_lighting(habilitar) Habilita o inhabilita el uso de iluminación.

 

Usando la iluminación, para cada vértice de un polígono el color es determinado. Después, el color de los píxeles internos está basado en el color de estos vértices. Hay dos modos que puede ser hecho: El polígono entero consigue el mismo color, o el color suavemente es interpolado sobre el polígono. Por defecto smooth shading es usado. Esto puede ser cambiado usando la función siguiente:

 

d3d_set_shading(smooth) Establece si usar smooth shading o no.

 

Para usar la iluminación obviamente tienes que definir luces. Dos diferentes luces existen: luces direccionales (como el sol), y luces posiciónales. La luz tiene un color. (Sólo soportamos la luz difusa, no la reflexión especular.) Las funciones siguientes existen para definir y usar luces:

 

d3d_light_define_direction(ind,dx,dy,dz,col) Define una luz dirigida. ind es el índice de la luz (usa un pequeño número positivo). (dx,dy,dz) es la dirección de la luz. col es el color de la luz (a menudo quieres usar c_white. Esta función no enciende la luz.

d3d_light_define_point(ind,x,y,z,rango,col) Define una luz de punto. ind es el índice de la luz (usa un pequeño número positivo). (x,y,z) es la posición de la luz. rango  indica qué lejos brilla la luz. La intensidad de la luz se disminuirá sobre este rango. col es el color de la luz. Esta función no enciende la luz.

d3d_light_enable(ind,permitir) Habilita (true) o deshabilita (false) la luz número ind.

 

La manera en que un objeto refleja la luz depende del ángulo entre la dirección de la luz y el normal de la superficie, es decir el vector que señala lejos de la superficie. De ahí, para crear objetos iluminados no sólo tienes que proporcionar la posición de los vértices, sino también sus normales. Para estas cuatro funciones adicionales están disponibles para definir los vértices de primitivas:

 

d3d_vertex_normal(x,y,z,nx,ny,nz) Añade el vértice (x,y,z) a la primitiva, con vector normal (nx,ny,nz).

d3d_vertex_normal_color(x,y,z,nx,ny,nz,col,alpha) Añade el vértice (x,y,z) a la primitiva, con vector normal (nx,ny,nz), y con su propio color y valor alpha.

d3d_vertex_normal_texture(x,y,z,nx,ny,nz,xtex,ytex) Añade el vértice (x,y) a la primitiva, con vector normal (nx,ny,nz), y con la posición (xtex,ytex) en la textura, mezclándose con el color y valor alpha establecidos antes.

d3d_vertex_normal_texture_color(x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Añade el vértice (x,y) a la primitiva, con vector normal (nx,ny,nz), y con la posición (xtex,ytex) en la textura, mezclándose con su propio color y valor alpha.

 

Note que para las formas básicas que puedes dibujar las normales automáticamente son puestas correctamente.