Share via


Propiedades ligeras (Direct3D 9)

Las propiedades de luz describen el tipo y el color de una fuente de luz. Dependiendo del tipo de luz que se utilice, una luz puede tener propiedades para atenuación y rango, o para efectos de foco. Pero, no todos los tipos de luces usan todas las propiedades. Direct3D usa la estructura D3DLIGHT9 para llevar información sobre las propiedades de la luz para todos los tipos de fuentes de luz. Esta sección contiene información para todas las propiedades ligeras. La información se divide en los siguientes grupos.

Las propiedades de posición, rango y atenuación definen la ubicación de una luz en el espacio mundial y cómo se comporta la luz que emite a lo largo de la distancia. Al igual que con todas las propiedades de luz que se usan en C++, estas se incluyen en la estructura D3DLIGHT9 de una luz.

Atenuación de luz

La atenuación controla cómo disminuye la intensidad de una luz hacia la distancia máxima especificada por la propiedad range. Tres miembros de estructura D3DLIGHT9 representan atenuación de luz: Atenuación0, Atenuación1 y Atenuación2. Estos miembros contienen valores de punto flotante comprendidos entre 0,0 y infinito, controlando la atenuación de una luz. Algunas aplicaciones establecen el miembro Atenuación1 en 1,0 y los demás en 0,0, lo que da lugar a una intensidad de luz que cambia como 1 /D, donde D es la distancia desde la fuente de luz hasta el vértice. La intensidad máxima de la luz está en la fuente, disminuyendo a 1 / (Rango de luz) en el rango de la luz. Normalmente, una aplicación establece Atenuación0 en 0,0, Atenuación1 en un valor constante y Atenuación2 en 0,0.

Puede combinar valores de atenuación para obtener efectos de atenuación más complejos. O bien, puede establecerlos en valores fuera del intervalo normal para crear efectos de atenuación incluso extraños. Sin embargo, no se permiten valores de atenuación negativos. Consulte Atenuación y factor de contenido destacado (Direct3D 9).

Color claro

Las luces de Direct3D emiten tres colores que se usan de forma independiente en los cálculos de iluminación del sistema: un color difuso, un color ambiente y un color especular. Cada uno se incorpora mediante el módulo de iluminación direct3D, que interactúa con un homólogo del material actual, para generar un color final usado en la representación. El color difuso interactúa con la propiedad de reflectancia difusa del material actual, el color especular con la propiedad de reflectancia especular del material, etc. Para obtener información específica sobre cómo Aplica Direct3D estos colores, consulte Matemáticas de iluminación (Direct3D 9).

En una aplicación de C++, la estructura D3DLIGHT9 incluye tres miembros para estos colores - Difuso, Ambiente y Especular - cada uno de ellos es una estructura D3DCOLORVALUE que define el color que se emite.

El tipo de color que se aplica más a los cálculos del sistema es el color difuso. El color difuso más usado es blanco (R:1.0 G:1.0 B:1.0), pero puede crear colores según sea necesario para lograr los efectos deseados. Por ejemplo, podría usar la luz roja para una chimenea, o bien podría usar la luz verde para una señal de tráfico establecida en "Go".

Por lo general, establece los componentes de color claro en valores entre 0,0 y 1,0, ambos incluidos, pero esto no es un requisito. Por ejemplo, puede establecer todos los componentes en 2.0, creando una luz que sea "más brillante que blanca". Este tipo de configuración puede ser especialmente útil cuando se usan valores de atenuación distintos de constantes.

Tenga en cuenta que aunque Direct3D usa valores RGBA para las luces, no se usa el componente de color alfa.

Por lo general, los colores del material se usan para la iluminación. Sin embargo, puede especificar que los colores del material-emissive, ambiente, difuso y especular-son invalidados por colores de vértices difusos o especulares. Esto se hace llamando a SetRenderState y estableciendo las variables de estado del dispositivo enumeradas en la tabla siguiente.

Variable de estado del dispositivo Significado Tipo Valor predeterminado
D3DRS_AMBIENTMATERIALSOURCE Define dónde obtener el color del material ambiente. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Define dónde obtener el color del material difuso. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Define dónde obtener el color del material especular. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Define dónde obtener el color del material emisivo. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Deshabilita o habilita el uso de colores de vértice. BOOL TRUE

 

El valor alfa/transparencia siempre procede del canal alfa del color difuso.

El valor de niebla siempre proviene del canal alfa del color especular.

D3DMATERIALCOLORSOURCE puede tener los siguientes valores.

  • D3DMCS_MATERIAL: el color del material se usa como origen.
  • D3DMCS_COLOR1: el color de vértice difuso se usa como origen.
  • D3DMCS_COLOR2: el color del vértice especular se usa como origen.

Dirección de la luz

La propiedad direction de una luz determina la dirección que la luz emitida por el objeto viaja, en el espacio mundial. La dirección solo se usa mediante luces direccionales y focos de luz, y se describe con un vector.

Establezca la dirección de la luz en el miembro Direction de la estructura D3DLIGHT9 de la luz. El miembro Direction es de tipo D3DVECTOR. Los vectores de dirección se describen como distancias desde un origen lógico, independientemente de la posición de la luz en una escena. Por lo tanto, un foco destacado que apunta directamente a una escena , a lo largo del eje Z positivo, tiene un vector de dirección de <0,0,1> , independientemente de dónde se defina su posición. Del mismo modo, puede simular la luz solar brillando directamente en una escena mediante una luz direccional cuya dirección es <0,-1,0>. Obviamente, no tienes que crear luces que brillan a lo largo de los ejes de coordenadas; Puede mezclar y combinar valores para crear luces que brillan en ángulos más interesantes.

Nota

Aunque no es necesario normalizar el vector de dirección de una luz, asegúrese siempre de que tiene magnitud. En otras palabras, no use un <vector de dirección 0,0,0> .

 

Posición de la luz

La posición de la luz se describe mediante una estructura D3DVECTOR en el miembro Position de la estructura D3DLIGHT9 . Se supone que las coordenadas x, y-y-z están en el espacio mundial. Las luces direccionales son el único tipo de luz que no usan la propiedad position.

Rango claro

La propiedad range de una luz determina la distancia, en el espacio mundial, en la que las mallas de una escena ya no reciben luz emitida por ese objeto. El miembro Range contiene un valor de punto flotante que representa el intervalo máximo de la luz, en el espacio mundial. Las luces direccionales no usan la propiedad range.

Luces y materiales