HLSL实现环境光光照模型

环境光光照模型公式:

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)));

其他同顶点渲染文章里的步骤

你可能感兴趣的:(HLSL实现环境光光照模型)