文件名称:光照示例-ecc 算法p 256曲线 规范
文件大小:6.56MB
文件格式:PDF
更新时间:2024-07-01 03:56:36
DX12游戏开发
7.2 光照示例 7.2.1 环境反射示例 因为环境反射就相当于一个亮度值,均等的没有衰减的呈现在物体表面,所以可以直接 用一个float4类型的全局变量来表示。环境反射的计算特别简单,只需要与纹理采样的结果 进行相乘就完成了。 在4.5.3小节的shader代码的基础上只需简单的添加一个float4类型的变量g_Ambient表 示环境反射的颜色值;然后在g_MeshTexture.Sample函数的返回结果上再乘以g_Ambient 就完成了,修改代码的地方如下所示: …… float4 g_Ambient; //定义一个环境反射的颜色 …… // 像素照射器 float4 PS( PS_INPUT input) : SV_Target { float4 outputColor = g_MeshTexture.Sample(MeshTextureSampler,input.Tex) * g_Ambient; return outputColor ; } 因为新shader代码增加了一个float4类型的4维向量,所以在C++代码中需要相应的做初 始化工作。首先定义一个ID3DX11EffectVectorVariable类型的指针,用来访问shader代码中 的g_Ambient这个变量;然后通过ID3DX11Effect:: GetVariableByName()函数得到shader中 变量;再通过ID3DX11EffectVariable:: AsVector()函数将该变量转换成指定的4维向量类型; 最后通过ID3DX11EffectVectorVariable:: SetFloatVector()函数设置环境反射的颜色值。具体 代码如下所示: ID3DX11EffectVectorVariable* g_Ambient; …… // Obtain technique objects g_pTechRenderCubeWithTexture = g_pEffect->GetTechniqueByName("RenderCubeWithTexture"); ID3DX11EffectVariable* effect11_variable = g_pEffect->GetVariableByName("g_Ambient"); g_Ambient = effect11_variable->AsVector(); …… float coler[4] = { 0.3f,0.3f,0.3f,1.0f }; g_Ambient->SetFloatVector(coler); 本小节实例参见“DirectXNine”项目工程,运行效果图 7.2.1_1 所示,对比 6.2.3 小 节的实例,从画面上看人物的亮度暗了许多,因为模拟了环境光,环境光亮点只有原来的 0.3 倍。