环境光光照模型公式:
I =Aintensity(环境光强度)* AColor(环境光颜色)* Amaterial(物体对环境光各颜色成分的反射系数)
如果场景中包含有漫反射和镜面反射光,则公式为:
Color = Aintensity * AColor + Diffuse + Specular
diffuse 和specular分别是漫反射和镜面反射光照公式的占位符
1.顶点渲染器代码
//-------------------
//全局变量由应用程序设置其值
//---------------------
float4x4 matWorldViewProj;
float4 materialAmbient;
//---------------
//输出结构
//---------------
struct VS_OUTPUT
{
float4 Pos:POSITION;
float4 Color:COLOR;
};
//--------------
//顶点渲染器函数
//--------------
VS_OUTPUT VS(float4 Pos:POSITION)
{
VS_OUTPUT Out=(VS_OUTPUT) 0;//小写的out是hlsl的关键字
Out.Pos = mul(Pos,matWorldViewProj);
float4 AmbientColor = { 1.0f,1.0f,1.0f,1.0f };
float AmbientIntensity = 0.5;
Out.Color = AmbientIntensity * AmbientColor * materialAmbient;
return Out;
}
2.设置材质环境光反射系数
//设置材质
D3DMATERIAL9 mtrl;
ZeroMemory( &mtrl, sizeof(D3DMATERIAL9) );
mtrl.Ambient.r = 1.0f;
mtrl.Ambient.g = 1.0f;
mtrl.Ambient.b = 0.0f;
mtrl.Ambient.a = 1.0f;
V_RETURN(g_pConstantTable->SetVector( pd3dDevice, "materialAmbient",
&D3DXVECTOR4(mtrl.Ambient.r, mtrl.Ambient.g,
mtrl.Ambient.b, mtrl.Ambient.a)));
其他同顶点渲染文章里的步骤