Compartilhar via


Vetores normais de face e vértice (Direct3D 9)

Cada rosto em uma malha tem um vetor normal de unidade perpendicular, conforme mostrado na ilustração a seguir. 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.

ilustração de um vetor normal para uma face frontal

Qualquer face que não é uma face frontal é uma face traseira. O Direct3D nem sempre renderiza faces traseiras; portanto, dizem que as faces traseiras são abatidas. Você pode alterar o modo de remoção para renderizar faces traseiras se desejar. Consulte Estado de abate (Direct3D 9) para obter mais informações.

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 exemplo.

ilustração de 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.

Se você estiver criando um objeto simples, defina os normais de vértice para apontar perpendicular para a superfície, conforme mostrado na ilustração a seguir.

ilustração de uma superfície plana composta por dois triângulos com normais de vértice

É mais provável, no entanto, que seu objeto seja composto por tiras de triângulo 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.

diagrama de duas superfícies (s1 e s2) e seus vetores normais e 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. Novamente, essas superfícies são vistas no limite. 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.

diagrama de duas superfícies (s1 e s2) com um vetor normal de vértice que se inclina para um rosto

Você pode usar o sombreamento Gouraud para exibir alguns objetos em uma cena 3D com bordas afiadas. Para fazer isso, duplize os vetores normais de vértice em qualquer interseção de rostos em que uma borda afiada é necessária, conforme mostrado na ilustração a seguir.

ilustração de vetores normais de vértice duplicados em 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