Compartir a través de


Vectores normales de cara y vértice (Direct3D 9)

Cada cara de una malla tiene un vector normal de unidad perpendicular, como se muestra en la ilustración siguiente. La dirección del vector viene determinada por el orden en que se definen los vértices y si el sistema de coordenadas es derecho o izquierdo. La cara normal apunta lejos del lado frontal de la cara. En Direct3D, solo está visible la parte frontal de una cara. Una cara frontal es una en la que los vértices se definen en orden de las agujas del reloj.

ilustración de un vector normal para una cara frontal

Cualquier cara que no sea una cara frontal es una cara posterior. Direct3D no siempre representa caras posteriores; por lo tanto, se dice que las caras posteriores se seleccionan. Puede cambiar el modo de selección para representar caras posteriores si lo desea. Consulte Culling State (Direct3D 9) (Estado de selección [Direct3D 9]) para obtener más información.

Direct3D usa los valores normales de la unidad de vértice para los efectos de sombreado, iluminación y texturización de Gouraud. En la ilustración siguiente se muestran los valores normales de ejemplo.

ilustración de los normales de vértices

Al aplicar sombreado Gouraud a un polígono, Direct3D usa los valores normales de vértice para calcular el ángulo entre la fuente de luz y la superficie. Calcula los valores de color e intensidad de los vértices y los interpola para cada punto en todas las superficies primitivas. Direct3D calcula el valor de intensidad de la luz mediante el ángulo. Cuanto mayor sea el ángulo, menos luz brilla en la superficie.

Si va a crear un objeto plano, establezca los valores normales del vértice para que apunten perpendiculares a la superficie, como se muestra en la ilustración siguiente.

ilustración de una superficie plana compuesta por dos triángulos con normales de vértice

Sin embargo, es más probable que el objeto esté formado por franjas de triángulos y los triángulos no sean coplanares. Una manera sencilla de lograr sombreado suave en todos los triángulos de la franja es calcular primero el vector normal de la superficie para cada cara poligonal con la que está asociado el vértice. El normal de vértice se puede establecer para hacer un ángulo igual con cada superficie normal. Sin embargo, este método podría no ser lo suficientemente eficaz para primitivos complejos.

Este método se muestra en el diagrama siguiente, que muestra dos superficies, S1 y S2 que se ven al borde desde arriba. Los vectores normales de S1 y S2 se muestran en azul. El vector normal del vértice se muestra en rojo. El ángulo que hace el vector normal del vértice con la superficie normal de S1 es el mismo que el ángulo entre el vértice normal y la superficie normal de S2. Cuando estas dos superficies están iluminadas y sombreadas con sombreado Gouraud, el resultado es un borde suavemente sombreado y redondeado suavemente entre ellas.

diagrama de dos superficies (s1 y s2) y sus vectores normales y vector normal de vértice

Si el normal de vértice se inclina hacia una de las caras con las que está asociada, hace que la intensidad de la luz aumente o disminuya para los puntos de esa superficie, dependiendo del ángulo que hace con la fuente de luz. En el diagrama siguiente se muestra un ejemplo. De nuevo, estas superficies se ven al borde. El vértice normal se inclina hacia S1, lo que hace que tenga un ángulo más pequeño con la fuente de luz que si el vértice normal tenía ángulos iguales con los normales de la superficie.

diagrama de dos superficies (s1 y s2) con un vector normal de vértice que se inclina hacia una cara

Puede usar sombreado Gouraud para mostrar algunos objetos en una escena 3D con bordes afilados. Para ello, duplique los vectores normales de vértice en cualquier intersección de caras donde se requiera un borde afilado, como se muestra en la ilustración siguiente.

ilustración de vectores normales de vértices duplicados en bordes agudos

Si usa los métodos DrawPrimitive para representar la escena, defina el objeto con bordes afilados como una lista de triángulos, en lugar de una franja de triángulos. Al definir un objeto como una franja de triángulos, Direct3D lo trata como un único polígono compuesto de varias caras triangulares. El sombreado Gouraud se aplica en cada cara del polígono y entre caras adyacentes. El resultado es un objeto que se sombrea suavemente de cara a cara. Dado que una lista de triángulos es un polígono compuesto por una serie de caras triangulares desenlazadas, Direct3D aplica sombreado Gouraud en cada cara del polígono. Sin embargo, no se aplica de cara a cara. Si dos o más triángulos de una lista de triángulos son adyacentes, parecen tener un borde afilado entre ellos.

Otra alternativa es cambiar a sombreado plano al representar objetos con bordes afilados. Este es el método más eficaz, pero puede dar lugar a objetos de la escena que no se representan tan realistamente como los objetos sombreados por Gouraud.

Sistemas de coordenadas y geometría