HLSL实现环境光光照模型

292 篇文章 14 订阅

环境光光照模型公式:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值