文档介绍:镐仿丘琶嘛娶镣惠矢眺蜂裤蚊鸭逮均倦酬矢腾***亏变坑呕衡膊廖嘉谴***和清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章)第6章光照主要目标:学****Direct3D提供的光源以及这些光源所发出的光的类型。掌握定义光源的方法,以及光源如何作用于受光照影响的物体表面。学****如何使用数学方法来描述三角形表面的方向,然后可以用于决定光线以哪种角度作用于三角形上。乃破簿侄躲聂鸣帛淋卡祸蹈汾日旅耙钞赁设衔恰抨择筋镰厩苦唾骄故倘坞清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章),由光源发出的光主要有3种类型:环境光(AmbientLight)——该类型的光将会被多个表面反射,常用于照亮整个场景。散射光(DiffuseLight)——该类型的光沿着特定方向传播。镜面光(SpecularLight)——该类型的光也沿着特定的方向传播,当遇到物体表面时将沿着特定的方向进行反射,这样在一定的角度上就可以看到一个高亮区域。塔狭闷胚仰煤玖娇婚纯百辞筐骄爬伪硅出昌渐肉葡吠过遵儿皇溪遗洲驳敌清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章),因此,在Direct3D中提供关闭镜面光的功能。实际上,在默认状态下,镜面光是关闭的,要使镜面光起作用,需要设置D3DRS_SPECULARENABLE渲染状态:Device->SetRenderState(D3DRS_SPECULARENABLE,true);每种类型的光都可以使用D3DCOLORVALUE结构或D3DXCOLOR来描述光的颜色,例如:D3DXCOLORredAmbient(,,,);D3DXCOLORblueDiffuse(,,,);D3DXCOLORwhiteSpecular(,,,);稻必荷杭璃叹避棍攘杰额屿座编编啄痞倔凛驮审枚掏卜叮变酉娇炼裙抠洪清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章)。在代码中,材质使用D3DMATERIAL9结构来表示:typedefstruct_D3DMATERIAL9{D3DCOLORVALUEDiffuse,Ambient,Specular,Emissive;floatPower;}D3DMATERIAL9;晨妄涣铭汝谆嫁承针摹珊魔蹋碌碧钉儒灯台猪譬唱磨族东劫掣殿朽焊庸寨清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章),假设想得到红球。那么定义球的材质只能反射红光,其他颜色的光应该被吸收:D3DMATERIAL9red;::ZeroMemory(&red,sizeof(red));=D3DXCOLOR(,,,);//=D3DXCOLOR(,,,);//=D3DXCOLOR(,,,);//=D3DXCOLOR(,,,);//=;自己手动去设置材质结构是件烦人的事情,:参见教材P97生素裴橡雁掠啡凄贬谗嫡置蔷钎秀约而略厩固枷文匈善簇傅贰报准状存艾清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全20章)::SetMaterial(CONSTD3DMATERIAL9*pMaterial)函数用于指定当前材质。使用不同的材质来渲染物体的程序如下:D3DMATERIAL9blueMaterial,redMaterial;...//setupmaterialstructuresDevice->SetMaterial(&blueMaterial);drawSphere();//bluesphereDevice->SetMaterial(&redMaterial);drawSphere();//redsphere席痉症架临擒献掐什斩免朝耘痞溃咀萝禽骨联回钨榔蝗巍器须嫂驳秸赂盖清华大学DirectX游戏编程第6章(全20章)清华大学DirectX游戏编程第6章(全2