個人檔案Quake3 启示录相片部落格清單更多 ![]() | 說明 |
|
7月19日 Ambient Lighting (Direct3D 9) 环境光Ambient lighting provides constant lighting for a scene. It lights all object vertices the same because it is not dependent on any other lighting factors such as vertex normals, light direction, light position, range, or attenuation. It is the fastest type of lighting but it produces the least realistic results. Direct3D contains a single global ambient light property that you can use without creating any light. Alternatively, you can set any light object to provide ambient lighting. The ambient lighting for a scene is described by the following equation. 环境光为场景提供了一种恒定不变的光照。环境光对所有物体的顶点的照明效果相同,因为它与其余光照因子,如顶点法向、光的方向、光的位置、范围或衰减等无关。环境光是最快的一种类型,但它提供的真实感最少。Direct3D 包含了一个全局的环境光属性,应用程序可以直接使用而无需创建任何光源。另外,应用程序也可以设定光源提供环境光照。场景中环境光的计算由以下公式描述。 Ambient Lighting = Ca*[Ga + sum(Atti*Spoti*Lai)] Where:
The value for Ca is either:
Note If either AMBIENTMATERIALSOURCE option is used, and the vertex color is not provided, then the material ambient color is used. To use the material ambient color, use SetMaterial as shown in the example code below. Ga is the global ambient color. It is set using SetRenderState(D3DRS_AMBIENT). There is one global ambient color in a Direct3D scene. This parameter is not associated with a Direct3D light object. Lai is the ambient color of the ith light in the scene. Each Direct3D light has a set of properties, one of which is the ambient color. The term, sum(Lai) is a sum of all the ambient colors in the scene. Ca的值可以是: 顶点颜色1,如果AMBIENTMATERIALSOURCE = D3DMCS_COLOR1,并且顶点声明中给出了第一个顶点的颜色。 注意 如果使用了任何一种AMBIENTMATERIALSOURCE,但是没有提供顶点颜色,那么系统会使用材质的环境反射色。 要使用材质的环境反射色,按以下示例代码使用SetMaterial方法。 Ga为全局的环境反射色,通过SetRenderState(D3DRENDERSTATE_AMBIENT)设置。Direct3D场景中只有一个全局环境反射色,它与其余Direct3D光源无关。 Lai为场景中第i个光源的环境反射色。每个Direct3D光源都有一组属性,其中一个就是环境反射色。符号sum(Lai)表示场景中所有环境反射色的总和。 ExampleIn this example, the object is colored using the scene ambient light and a material ambient color. #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); According to the equation, the resulting color for the object vertices is a combination of the material color and the light color. These two images show the material color, which is gray, and the light color, which is bright red. The resulting scene is shown below. The only object in the scene is a sphere. Ambient light lights all object vertices with the same color. It is not dependent on the vertex normal or the light direction. As a result, the sphere looks like a 2D circle because there is no difference in shading around the surface of the object. To give objects a more realistic look, apply diffuse or specular lighting in addition to ambient lighting. 引用通告此內容的引用通告是: http://topameng.spaces.live.com/blog/cns!F962D4854A8233D!460.trak 引述這則內容的部落格
|
|
|