环境光
环境光为场景提供恒定照明。 它会无差别地点亮所有对象顶点,因为它不取决于任意其他照明因素,例如,顶点法线、光线方向、光线位置、范围或衰减。 环境光在所有方向都是恒定的,并且会无差别地为某个对象的所有像素上色。 这是一种快速计算,但会让对象看上去扁平且不逼真。
环境照明是最快的照明类型,但它产生最不真实的结果。 Direct3D 包含一个全局环境光属性,无需创建任何光线即可使用。 或者,你可以设置任何光对象以提供环境照明。
以下公式描述了场景的环境照明。
环境光 = Cₐ*[Gₐ + sum(Atteni*Spoti*Lai)]
其中:
参数 | 默认值 | 类型 | 描述 |
---|---|---|---|
Cₐ | (0,0,0,0) | D3DCOLORVALUE | 材料环境颜色 |
Gₐ | (0,0,0,0) | D3DCOLORVALUE | 全局环境颜色 |
Atteni | (0,0,0,0) | D3DCOLORVALUE | ith light 的光衰减。 请参阅衰减和聚焦因素。 |
Spoti | (0,0,0,0) | D3DVECTOR | 光的聚光因素。 请参阅衰减和聚焦因素。 |
sum | 空值 | 空值 | 环境光的总和 |
Lai | (0,0,0,0) | D3DVECTOR | Ith light 的浅色环境颜色 |
Cₐ 的值为:
- vertex color1,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR1,并在顶点声明中提供第一个顶点颜色。
- vertex color2,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR2,并在顶点声明中提供第二个顶点颜色。
- 材料环境颜色。
注意 如果使用任一 AMBIENTMATERIALSOURCE 选项,且未提供顶点颜色,则使用材料环境颜色。
若要使用材料环境颜色,请使用 SetMaterial,如以下示例代码所示。
Gₐ 是全局环境颜色。 它被设置为使用 SetRenderState(D3DRS_AMBIENT)。 Direct3D 场景中有一种全局环境颜色。 此参数不与 Direct3D 光对象关联。
Lai 是场景中光线的环境颜色。 每个 Direct3D 光都有一组属性,其中一种是环境颜色。 术语 sum(Lai)是场景中所有环境颜色的总和。
示例
在此示例中,使用场景环境光和材料环境光为对象着色。
#define GRAY_COLOR 0x00bfbfbf
Ambient.r = 0.75f;
Ambient.g = 0.0f;
Ambient.b = 0.0f;
Ambient.a = 0.0f;
根据公式,对象顶点的结果颜色是材料颜色和浅色的组合。
下面的两个图示显示了材料颜色,即灰色,浅色,红色为亮红色。
生成的场景如下图所示。 场景中的唯一对象是一个球体。 环境光会照亮所有具有相同颜色的对象顶点。 它不取决于顶点法线或光线方向。 因此,球体看起来像 2D 圆形,因为对象表面周围的着色没有差别。
若要为对象提供更逼真的外观,除了环境照明外,还应用漫射或反射照明。
相关主题