Partilhar via


Iluminação ambiente (Direct3D 9)

A iluminação ambiente proporciona iluminação constante para uma cena. Ele ilumina todos os vértices do objeto da mesma forma, porque não depende de quaisquer outros fatores de iluminação, como vértices normais, direção da luz, posição da luz, alcance ou atenuação. É o tipo de iluminação mais rápido, mas produz os resultados menos realistas. O Direct3D contém uma única propriedade global de luz ambiente que pode ser usada sem criar luz. Como alternativa, você pode definir qualquer objeto de luz para fornecer iluminação ambiente. A iluminação ambiente de uma cena é descrita pela seguinte equação.

Iluminação ambiente = Cₐ*[Gₐ + soma(Atteni*Spoti*Lai)]

Onde:

Parâmetro Valor padrão Tipo Descrição
Cₐ (0,0,0,0) D3DCOLORVALUE Cor ambiente do material
Gₐ (0,0,0,0) D3DCOLORVALUE Cor ambiente global
Atençãoi (0,0,0,0) D3DCOLORVALUE Atenuação da luz i-ésima. Consulte Atenuação e Fator de Destaque (Direct3D 9).
Spoti (0,0,0,0) D3DVECTOR Fator de holofote da i-ésima luz. Consulte Atenuação e Fator de Destaque (Direct3D 9).
soma N/A N/A Soma da luz ambiente
Lai (0,0,0,0) D3DVECTOR Cor ambiente da luz i-ésima

 

O valor para Cₐ é um dos seguintes:

  • cor do vértice1, se AMBIENTMATERIALSOURCE = D3DMCS_COLOR1, e a primeira cor de vértice é fornecida na declaração de vértice.
  • cor do vértice2, se AMBIENTMATERIALSOURCE = D3DMCS_COLOR2, e a segunda cor do vértice é fornecida na declaração de vértice.
  • cor ambiental do material

Observação

Se a opção AMBIENTMATERIALSOURCE for usada e a cor do vértice não for fornecida, a cor ambiente do material será usada.

 

Para usar a cor ambiente do material, use SetMaterial como mostrado no código de exemplo abaixo.

Gₐ é a cor ambiente global. Ele é definido usando SetRenderState(D3DRS_AMBIENT). Há uma cor ambiente global em uma cena Direct3D. Este parâmetro não está associado a um objeto light Direct3D.

Lai é a cor ambiente da i-ésima luz na cena. Cada luz Direct3D tem um conjunto de propriedades, uma das quais é a cor ambiente. O termo, sum(Lai) é uma soma de todas as cores ambientais na cena.

Exemplo

Neste exemplo, o objeto é colorido usando a luz ambiente da cena e uma cor ambiente material.

#define GRAY_COLOR  0x00bfbfbf

// create material
D3DMATERIAL9 mtrl;
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient.r = 0.75f;
mtrl.Ambient.g = 0.0f;
mtrl.Ambient.b = 0.0f;
mtrl.Ambient.a = 0.0f;
m_pd3dDevice->SetMaterial(&mtrl);
m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, GRAY_COLOR);

De acordo com a equação, a cor resultante para os vértices do objeto é uma combinação da cor do material e da cor clara.

As duas ilustrações a seguir mostram a cor do material, que é cinza, e a cor clara, que é vermelho brilhante.

ilustração de uma esfera cinzenta ilustração de uma esfera vermelha

A cena resultante é mostrada na ilustração a seguir. O único objeto na cena é uma esfera. A luz ambiente ilumina todos os vértices do objeto com a mesma cor. Não depende do vértice normal ou da direção da luz. Como resultado, a esfera parece um círculo 2D porque não há diferença no sombreamento em torno da superfície do objeto.

ilustração de uma esfera com iluminação ambiente

Para dar aos objetos uma aparência mais realista, aplique iluminação difusa ou especular, além da iluminação ambiente.

Matemática da Iluminação