第04讲 光照和材质.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光照与材质 一、光照模型: 1、环境光:环境光没有位置和方向,它是光线经过多次散射后所形成的光。所有的光线都均匀地从各个方向照射到物体上,并且照亮场景中的所有物体。环境光只有一个颜色值,而且不会衰减,所以在所有方向和所有物体表面上投射的环境光的数量是恒定不变的。 环境光是完全独立于场景中的任何发光物体的光照模型,所以环境光模型也被称作全局光照模型。在Direct3D应用程序中,可以调用IDirect3DDevice接口的SetRenderState方法设置场景中的环境光。例如: // 设置灰色的环境光 g_pd3dDevice-SetRenderState( D3DRS_AMBIENT, D3DCOLOR_XRGB(222, 222, 222) ); 2、漫反射光:漫反射光在生活中最为普遍,太阳的直射、日光灯的照射都可以看成漫反射的近似。漫反射不同于环境光,漫反射光的空间位置和方向对物体的照明有很大影响。但与观察者位置无关,因此在漫反射光照模型中一个物体的表面在所有方向上的反射都是一样的,如图4.1所示。 3、镜面反射光:镜面反射发生在光滑物体(如金属物品、玻璃制品等)的表面,当光线照射到这类物体表面时产生的高光反射,并且当观察者移动自己所处的位置,反射的亮度也不一样,观察方向与反射光线越靠拢,发射光的强大就越大,如图4.2所示。 由于镜面反射的计算量比较大,Direct3D在默认状态下不对物体进行镜面反射计算,可以调用SetRenderState方法启用镜面反射。例如: g_pd3dDevice-SetRenderState ( D3DRS_SPECULARENABLE , TRUE ); 二、光源类型: Direct3D提供了三种光源类型:点光源(Point Light)、方向光(Directional Light)和聚光灯(Spot Light)。在Direct3D中,光源类型及其属性由D3DLIGHT9结构表示。该结构体的定义如下: typedef struct D3DLIGHT9 { D3DLIGHTTYPE Type; // 光源类型 D3DCOLORVALUE Diffuse; // 漫反射光强度 D3DCOLORVALUE Specular; // 环境光强度 D3DCOLORVALUE Ambient; // 镜面反射光强度 D3DVECTOR Position; // 光源位置 D3DVECTOR Direction; // 光照方向 float Range; // 光照范围 float Attenuation0; // 衰减系数1 float Attenuation1; // 衰减系数2 float Attenuation2; // 衰减系数3 float Falloff; // 聚光灯的辐射系数 float Theta; // 聚光灯的内锥体大小 float Phi; // 聚光灯的外锥体大小 } D3DLIGHT9, *LPD3DLIGHT; 1、点光源是从一个中心点向空间中各个方向发射相等强度光线的光源。点光源具有颜色和位置,但没有确定的方向。点光源向各个方向发出光相,并且光的亮度会随着距离而衰减,如图4.3所示。 为了能够使用点光源,在应用程序中需要提供光源的位置、颜色和衰减系数等参数。例如,下面的代码将创建一个范围为1000.0f,颜色为白色且位于原点的点光源。 ?D3DLIGHT9 light; ::ZeroMemory( light, sizeof(light) ); light.Type = D3DLIGHT_POINT; // 点光源 light.Ambient = D3DCOLOR_XRGB(255, 255, 255); // 环境光, 白色 light.Ambient.r= light.Ambient.g= light.Ambient.b= light.Diffuse = D3DCOLOR_XRGB(255, 255, 255); // 漫反射光, 白色 light.Specular = D3DCOLOR_XRGB(255, 255, 255); // 镜面反射光, 白色 light.Position = D3DXVECTOR3(0.0f, 0.0f, 0.0f); // 点光源位置, 原点 light.Range

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档