Compartir a través de


Vectores normales de caras y vértices

Cada cara de una malla tiene un vector normal de unidad perpendicular. La dirección del vector viene determinada por el orden en que se definen los vértices y si el sistema de coordenadas es de derecha o izquierda.

Vector normal de unidad perpendicular para una cara frontal

Cada cara de una malla tiene un vector normal de unidad perpendicular. La dirección del vector viene determinada por el orden en que se definen los vértices y si el sistema de coordenadas es de derecha o izquierda. 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.

En la ilustración siguiente se muestra un vector normal para una cara frontal:

un vector normal para una cara frontal

Selección de caras posteriores

Cualquier cara que no sea una cara frontal es una cara posterior. Direct3D no siempre representa caras posteriores; Se dice que las caras posteriores se seleccionan. La selección de caras posteriores significa eliminar las caras traseras de la representación. Puede cambiar el modo de selección para representar las caras posteriores si lo desea. Consulte El estado de selección para obtener más información.

Normales de unidad de vértices

Direct3D usa los normales de unidad de vértices para los efectos de sombreado, iluminación y texturing de Gouraud.

En la ilustración siguiente se muestran los valores normales de vértices:

normales de vértices

Al aplicar sombreado Gouraud a un polígono, Direct3D usa los 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 de 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.

Superficies planas

Si va a crear un objeto plano, establezca los valores normales del vértice para que apunten perpendiculares a la superficie.

En la ilustración siguiente se muestra una superficie plana compuesta de dos triángulos con normales de vértices:

superficie plana compuesta de dos triángulos con normales de vértices

Sombreado suave en un objeto no plano

En lugar de un objeto plano, es más probable que el objeto se compone de 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 superficie para cada cara poligonal con la que está asociado el vértice. El vértice normal 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 vistos de 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.

En la ilustración siguiente se muestran dos superficies (S1 y S2) y sus vectores normales y vector normal de vértices:

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

Si el vértice normal 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 realiza con la fuente de luz. En el diagrama siguiente se muestra un ejemplo. 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 tuviera ángulos iguales con los normales de la superficie.

En la ilustración siguiente se muestran dos superficies (S1 y S2) con un vector normal de vértice que se inclina hacia una cara:

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

Bordes afilados

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

En la ilustración siguiente se muestran vectores normales de vértices duplicados en bordes afilados:

vectores normales de vértices duplicados en bordes afilados

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. Cuando se define un objeto como una franja de triángulos, Direct3D la trata como un único polígono compuesto por 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 disjoint, 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. Esto es computacionalmente 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 de Gouraud.

Sistemas de coordenadas y geometría