Propriedades Light (Direct3D 9)
As propriedades de luz descrevem o tipo e a cor de uma fonte de luz. Dependendo do tipo de luz que está sendo usada, uma luz pode ter propriedades para atenuação e alcance, ou para efeitos de holofote. Mas, nem todos os tipos de luzes usam todas as propriedades. O Direct3D usa a estrutura D3DLIGHT9 para transportar informações sobre as propriedades da luz para todos os tipos de fontes de luz. Esta seção contém informações para todas as propriedades da luz. As informações estão divididas nos seguintes grupos.
As propriedades de posição, alcance e atenuação definem a localização de uma luz no espaço mundial e como a luz que ela emite se comporta ao longo da distância. Como acontece com todas as propriedades de luz que você usa em C++, elas estão contidas na estrutura de D3DLIGHT9 de uma luz.
- de atenuação da luz
- de cor clara
- Direção da Luz
- de posição da luz
- Gama Light
Atenuação da luz
A atenuação controla como a intensidade de uma luz diminui em direção à distância máxima especificada pela propriedade range. Três D3DLIGHT9 membros da estrutura representam a atenuação da luz: Atenuação0, Atenuação1 e Atenuação2. Esses membros contêm valores de ponto flutuante que variam de 0,0 até o infinito, controlando a atenuação de uma luz. Algumas aplicações definem o membro Attenuation1 para 1.0 e as outras para 0.0, resultando em intensidade de luz que muda como 1 / D, onde D é a distância da fonte de luz para o vértice. A intensidade máxima da luz está na fonte, diminuindo para 1 / (Faixa de Luz) na faixa da luz. Normalmente, um aplicativo define Attenuation0 como 0.0, Attenuation1 como um valor constante e Attenuation2 como 0.0.
Você pode combinar valores de atenuação para obter efeitos de atenuação mais complexos. Ou, você pode defini-los para valores fora do intervalo normal para criar efeitos de atenuação ainda mais estranhos. Valores de atenuação negativos, no entanto, não são permitidos. Consulte Atenuação e Fator de Destaque (Direct3D 9).
Cor clara
As luzes no Direct3D emitem três cores que são usadas independentemente nos cálculos de iluminação do sistema: uma cor difusa, uma cor ambiente e uma cor especular. Cada um é incorporado pelo módulo de iluminação Direct3D, interagindo com uma contraparte do material atual, para produzir uma cor final usada na renderização. A cor difusa interage com a propriedade de refletância difusa do material atual, a cor especular com a propriedade de refletância especular do material, e assim por diante. Para obter detalhes sobre como o Direct3D aplica essas cores, consulte Mathematics of Lighting (Direct3D 9).
Em uma aplicação C++, a estrutura D3DLIGHT9 inclui três membros para essas cores - Difuso, Ambiente e Especular - cada um é uma estrutura D3DCOLORVALUE que define a cor que está sendo emitida.
O tipo de cor que se aplica mais fortemente aos cálculos do sistema é a cor difusa. A cor difusa mais comum é o branco (R:1.0 G:1.0 B:1.0), mas você pode criar cores conforme necessário para alcançar os efeitos desejados. Por exemplo, você pode usar a luz vermelha para uma lareira ou pode usar a luz verde para um sinal de trânsito definido como "Ir".
Geralmente, você define os componentes de cor clara para valores entre 0,0 e 1,0, inclusive, mas isso não é um requisito. Por exemplo, você pode definir todos os componentes como 2.0, criando uma luz que é "mais brilhante do que branco". Esse tipo de configuração pode ser especialmente útil quando você usa configurações de atenuação diferentes da constante.
Observe que, embora o Direct3D use valores RGBA para luzes, o componente de cor alfa não é usado.
Normalmente, as cores do material são usadas para iluminação. No entanto, você pode especificar que as cores do material - emissiva, ambiente, difusa e especular - devem ser substituídas por cores de vértice difusa ou especular. Isso é feito chamando SetRenderState e definindo as variáveis de estado do dispositivo listadas na tabela a seguir.
Variável de estado do dispositivo | Significado | Tipo | Inadimplência |
---|---|---|---|
D3DRS_AMBIENTMATERIALSOURCE | Define onde obter a cor do material ambiente. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_DIFFUSEMATERIALSOURCE | Define onde obter cor de material difusa. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR1 |
D3DRS_SPECULARMATERIALSOURCE | Define onde obter a cor do material especular. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR2 |
D3DRS_EMISSIVEMATERIALSOURCE | Define onde obter cor de material emissivo. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_COLORVERTEX | Desabilita ou habilita o uso de cores de vértice. | BOOL | VERDADEIRO |
O valor alfa/transparência vem sempre apenas do canal alfa da cor difusa.
O valor de névoa sempre vem apenas do canal alfa da cor especular.
D3DMATERIALCOLORSOURCE pode ter os seguintes valores.
- D3DMCS_MATERIAL - A cor do material é usada como fonte.
- D3DMCS_COLOR1 - A cor do vértice difusa é usada como fonte.
- D3DMCS_COLOR2 - A cor do vértice especular é usada como fonte.
Direção da luz
A propriedade de direção de uma luz determina a direção que a luz emitida pelo objeto viaja, no espaço do mundo. A direção é usada apenas por luzes direcionais e holofotes, e é descrita com um vetor.
Defina a direção da luz no membro Direção da estrutura D3DLIGHT9 da luz. O membro da direção é do tipo D3DVECTOR. Os vetores de direção são descritos como distâncias de uma origem lógica, independentemente da posição da luz em uma cena. Portanto, um holofote que aponta diretamente para uma cena - ao longo do eixo z positivo - tem um vetor de direção de <0,0,1> não importa onde sua posição esteja definida. Da mesma forma, você pode simular a luz solar brilhando diretamente em uma cena usando uma luz direcional cuja direção é <0,-1,0>. Obviamente, você não precisa criar luzes que brilham ao longo dos eixos coordenados; Você pode misturar e combinar valores para criar luzes que brilham em ângulos mais interessantes.
Observação
Embora você não precise normalizar o vetor de direção de uma luz, sempre certifique-se de que ele tenha magnitude. Em outras palavras, não use um vetor de direção <0,0,0>.
Posição da luz
A posição da luz é descrita usando uma estrutura D3DVECTOR no membro Posição da estrutura D3DLIGHT9. Supõe-se que as coordenadas x, y e z estejam no espaço mundial. As luzes direcionais são o único tipo de luz que não usa a propriedade position.
Gama de Luz
A propriedade de alcance de uma luz determina a distância, no espaço do mundo, na qual as malhas em uma cena não recebem mais a luz emitida por esse objeto. O membro Range contém um valor de ponto flutuante que representa o alcance máximo da luz, no espaço mundial. As luzes direcionais não usam a propriedade range.
Tópicos relacionados