- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 光照与材质 在三维图形程序中使用光照效果能够有效地增强场景的真实感。如一个球如果没有添加加灯光处理时,球体看上去就是一个圆。在D3D中,通过计算场景中的光线和物体表面材质反射光线颜色的数学交互,可使光线模型接近于真实世界的照明系统。 光 照 当我们观察一个三维物体时,自然界的各种可见光照射到物体上,一部分被物体吸收,剩下的部分被反射,这些反射光线到达我们的眼睛,被眼睛的细胞接收,就形成了我们看到的大自然的各种物体的颜色。 5.1光照计算模型 在真实世界中,光线在到达眼睛之前经过了物体表面的多次反射,每次反射时,物体表面都会吸收一些光,有些被随机反射扩散出去,其余的到达下一个物体的表面或眼睛。真实世界中光线反射的效果就是光线跟踪算法需要模拟实现的。尽管光线跟踪算法能够创建非常逼真的与自然界中观察到的极为相似的景象,但是还没有实时程序能够完成这些运算。 D3D的四种光照计算模型 考虑到实时渲染的需要,D3D使用更简单的方法进行光照计算。D3D光照计算模型包括4种:环境光、漫反射光、镜面反射光和自发光。它们的结合能灵活高效地解决三维图形程序中的光照问题。 环境光 一个物体即使没有直接被光源照射,但只要在光线通过其他物体的折射、反射到达该物体,它也能被看见。在基本光照模型中,可以在一个场景中设置一个基准光亮度,可简单地模拟一种从不同物体表面所产生的反射光的统一照明,称为环境光(ambient light)或背景光。环境光没有位置或方向上的特征,只有一个颜色亮度值,而且不会衰减,所以在所有方向和所有物体表面上投射的环境光数量是不变的。 通过设置渲染状态函数来设置环境光 HRESULT SetRenderState( D3DRENDERSTATETYPR State,//渲染类型 D3WORD Value //灯光属性值 ); D3DX9定义的渲染参数常量 typedef enum _D3DRENDERSTATETYPE { … … D3DRS_SPECULARENABLE = 29, …… D3DRS_AMBIENT = 139, …… D3DRS_FORCE_DWORD = 0x7fffffff } D3DRENDERSTATETYPE; 设置环境光示例代码片段 D3DCOLOR ambientcolor=D3DCOLOR_XRGB(64,64,64); //g_pd3dDevice为一个有效的Direct3D设备指针 g_pd3dDevice-SetRenderState( D3DRS_AMBIENT,ambientcolor); 漫反射 漫反射光在现实生活中最为普遍,太阳的直射、日光灯的照射都可以用漫反射光照模型来近似。不同于环境光,漫反辞去光的空间位置和方向对物体的照明有很大的影响。图形系统中物体表面顶点P的漫反射颜色值Idiffuse的计算公式为: Idiffuse=k·Ilight·cosθ 前式中k为物体表面材质的反射系统,Ilight为灯光颜色,θ为物体表面顶点指向光源位置的方向向量L和顶点法线N之间的夹角。如果L和N为单位向量,由几何知识可知,cos θ等于L和N的点积,所以Idiffuse的计算公式可变为: Idiffuse=k·Ilight·(L·N) 在D3D中,物体表面顶点处的漫反射颜色值就是利用上式计算的,需要说明的是,在D3D中颜色值是由红、绿、蓝3个分量表示在具体计算时也是按3个分量分别计算。 镜面反射 当观察金属物品或玻璃制品的表面时,改变点的位置,可以发现金属品表面的亮度也在发生变化,这种现象往往发生在光滑物体表面,称之为镜面反射。 设物体表面顶点指向观察点的单位向量为V,反射光线为R,R和V之间的夹角为Φ,顶点P的镜面反射颜色值可由下式近似计算: Ispecular=Ks·Ilight· (cos Φ)n=K·sIlight· (VR)n 其中Ks和n为物体表面材质的镜面反射系数。可以看出镜面反射的计算量比较大。在默认状态下,D3D不对物体进行镜面反射计算,如果要D3D镜面反射光照计算,需要设置相关的渲染状态。 自发光 自发光是指对象自己发出的光。自发光其实就是通过对象的自发光材质实现的。用结构D3DMATERIAL9的成员Emissive描述自发光的颜色和透明度。自发光可以影响一个对象的颜色,如通过设置灰暗材质的自发光颜色属性可以使其变得明亮一点。可以使用材质的自发光属性实现发光的对象,而不用在场景内添加灯光,从而缩小了计算量。例如,可以通过具有蓝色自发光属性的材质实现一块蓝色水晶。 对光照计算模型的说明 环境光所实现的实际上是一个定值没有方向属性
文档评论(0)