Face e vetores normais de vértice

Cada rosto em uma malha tem um vetor normal de unidade perpendicular. Direção do vetor é determinada pela ordem em que os vértices são definidos, e se o sistema de coordenadas é orientado à direita ou esquerda.

Vetor normal da unidade perpendicular para uma face frontal

Cada rosto em uma malha tem um vetor normal de unidade perpendicular. Direção do vetor é determinada pela ordem em que os vértices são definidos, e se o sistema de coordenadas é orientado à direita ou esquerda. A face normal aponta para longe do lado frontal da face. No Direct3D, somente a frente de um rosto fica visível. Uma face frontal é aquela na qual os vértices estão definidos em ordem no sentido horário.

A ilustração a seguir mostra um vetor normal para uma face frontal:

um vetor normal para uma face frontal

Abater rostos para trás

Qualquer face que não é uma face frontal é uma face traseira. O Direct3D nem sempre renderiza faces traseiras; as faces traseiras normalmente são removidas. Remover a face traseira significa eliminar as faces traseiras da renderização. Você pode alterar o modo de remoção para renderizar faces traseiras se desejar. Consulte Estado de Remoção para obter mais informações.

Normais de unidade de vértice

O Direct3D usa as normais de unidade de vértice para os efeitos de sombreamento Gouraud, iluminação e texturização.

A ilustração a seguir mostra normais de vértice:

normais de vértice

Ao aplicar o sombreamento Gourard em um polígono, o Direct3D usa as normais de vértice para calcular o ângulo entre a fonte de luz e a superfície. Ele calcula os valores de cor e intensidade para os vértices e os interpola para cada ponto entre todas as superfícies do primitivo. O Direct3D calcula o valor de intensidade de luz, usando o ângulo. Quanto maior o ângulo, menos a luz chega à superfície.

Superfícies planas

Se você estiver criando um objeto plano, defina as normais de vértice para apontar perpendicular à superfície.

A ilustração a seguir mostra que uma superfície plana composta de dois triângulos com normais de vértice:

superfície plana composto de dois triângulos com normais de vértice

Sombreamento suave em um objeto não plano

Em vez de um objeto plano, é mais provável que seu objeto seja composto de faixas de triângulos e os triângulos não sejam coplanares. Uma maneira simples de alcançar o sombreamento suave entre todos os triângulos na faixa é primeiro calcular o vetor normal de superfície para cada face poligonal à qual o vértice está associado. A normal de vértice pode ser definida para fazer um ângulo igual com cada superfície normal. No entanto, esse método talvez não seja eficiente o suficiente para primitivos complexos.

Esse método é ilustrado pelo diagrama a seguir, que mostra duas superfícies, S1 e S2 vistas a partir de cima. Os vetores normais de S1 e S2 são mostrados em azul. O vetor normal de vértice é mostrado em vermelho. O ângulo que o vetor normal de vértice faz com a superfície normal de S1 é igual ao ângulo entre a normal de vértice e a normal de superfície de S2. Quando essas duas superfícies são iluminadas e sombreadas com sombreamento Gouraud, o resultado é uma borda suavemente sombreada, suavemente arredondada entre eles.

A ilustração a seguir mostra duas superfícies (S1 e S2) e seus vetores normais e o vetor normal de vértice:

duas superfícies (s1 e s2) e seus vetores normais e o vetor normal de vértice

Se a normal de vértice estiver em direção a uma das faces com a qual ela está associada, ela fará com que a intensidade de luz aumente ou diminua para os pontos nessa surface, dependendo do ângulo que ela faz com a fonte de luz. O diagrama a seguir mostra um exemplo. Essas superfícies são vistas de cima. A normal de vértice está na direção C1, fazendo com que ela tenha um ângulo menor com a fonte de luz do que se a normal de vértice tivesse ângulos iguais com as normais de superfície.

A ilustração a seguir mostra duas superfícies (S1 e S2) com um vetor normal de vértice que está na direção de uma face:

duas superfícies (s1 e s2) com um vetor normal de vértice que está na direção de uma face

Bordas afiadas

Você pode usar o sombreamento Gouraud para exibir alguns objetos em uma cena 3D com bordas afiadas. Para fazer isso, duplique os vetores de normal de vértice em qualquer interseção de faces onde uma borda afiada é necessária.

A ilustração a seguir mostra os vetores de normal de vértice duplicados nas bordas afiadas:

vetores de normal de vértice duplicados nas bordas afiadas

Se você usar os métodos DrawPrimitive para renderizar a cena, defina o objeto com bordas afiadas como uma lista de triângulos, em vez de uma faixa de triângulos. Quando você define um objeto como uma faixa triangular, o Direct3D trata isso como um único polígono composto de várias faces triangulares. O sombreamento Gouraud é aplicado em cada face do polígono e entre as faces adjacentes.

O resultado é um objeto que é suavemente sombreado de face para face. Como uma lista de triângulos é um polígono composto de uma série de faces triangulares separadas, o Direct3D aplica o sombreamento Gouraud em cada face do polígono. No entanto, ele não é aplicado de face para face. Se dois ou mais triângulos de uma lista de triângulos forem adjacentes, eles aparentam ter uma borda afiada entre eles.

Outra alternativa é alterar para o sombreamento simples ao renderizar objetos com bordas afiadas. Computacionalmente, este é o método mais eficiente, mas isso resultar em objetos na cena que não são renderizados de forma tão realista quanto os objetos que estão com sombreamento Gouraud.

Sistemas de coordenadas e geometria