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 use, una luz puede tener propiedades para atenuación y rango, o para efectos destacados. Pero no todos los tipos de luces usan todas las propiedades. Direct3D usa la estructura D3DLIGHT9 para llevar información sobre las propiedades de luz para todos los tipos de fuentes de luz. Esta sección contiene información sobre 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 que van desde 0,0 hasta infinito, controlando la atenuación de una luz. Algunas aplicaciones establecen el miembro De atenuación1 en 1.0 y los demás en 0,0, lo que da como resultado 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 que se usa 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 Direct3D aplica estos colores, consulte Matemáticas de iluminación (Direct3D 9).
En una aplicación de C++, la estructura de D3DLIGHT9 incluye tres miembros para estos colores - Difuso, Ambiente y Especular - cada uno 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 común es blanco (R:1.0 G:1.0 B:1.0), pero puede crear colores según sea necesario para lograr efectos deseados. Por ejemplo, podría usar la luz roja para una chimenea o podría usar la luz verde para una señal de tráfico establecida en "Go".
Por lo general, se establecen los componentes de color claro en valores comprendidos 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 usa la configuración de atenuación distinta de constante.
Tenga en cuenta que, aunque Direct3D usa valores RGBA para las luces, no se usa el componente de color alfa.
Normalmente, los colores del material se usan para la iluminación. Sin embargo, puede especificar que los colores del material-emissive, ambiente, difuso y especular se invalidan mediante colores de vértices difusos o especulares. Para ello, se llama a SetRenderState y establece las variables de estado del dispositivo enumeradas en la tabla siguiente.
Variable de estado del dispositivo | Significado | Tipo | 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értices. | BOOL | VERDADERO |
El valor alfa/transparencia siempre procede del canal alfa del color difuso.
El valor de niebla siempre procede 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, y se describe con un vector.
Establezca la dirección de la luz en el miembro Dirección 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 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 de <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 usa la propiedad position.
Intervalo 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.
Temas relacionados