首页 三维编程实验十、d3d光照应用

三维编程实验十、d3d光照应用

举报
开通vip

三维编程实验十、d3d光照应用实验十、D3D光照应用 1、 实验目的 1、 掌握D3D的光照模型 2、 实验步骤 1、 打开vs.net2005,打开ftp上的3Ddemo9项目,将顶点缓冲的长度从18改为24,执行并观看结果。 if(FAILED(g_pD3DDevice->CreateVertexBuffer( 24* sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMV...

三维编程实验十、d3d光照应用
实验十、D3D光照应用 1、 实验目的 1、 掌握D3D的光照模型 2、 实验步骤 1、 打开vs.net2005,打开ftp上的3Ddemo9项目,将顶点缓冲的长度从18改为24,执行并观看结果。 if(FAILED(g_pD3DDevice->CreateVertexBuffer( 24* sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVertexBuffer, NULL))) 2、 修改物体的材质 void InitMaterial() { D3DCOLORVALUE rgbaDiffuse = {1.0, 1.0, 1.0, 1.0,};//漫射光的反射率 D3DCOLORVALUE rgbaAmbient = {1.0, 1.0, 1.0, 1.0,};//环境光的反射率 D3DCOLORVALUE rgbaSpecular = {1.0 ,1.0, 1.0, 1.0,};//镜面光的反射率 D3DCOLORVALUE rgbaEmissive = {0.0, 0.0, 0.0, 1.0,};//物体本身的亮度 matMaterial.Diffuse = rgbaDiffuse; matMaterial.Ambient = rgbaAmbient; matMaterial.Specular = rgbaSpecular; matMaterial.Power = 100.0f;//高光点的锐度 matMaterial.Emissive = rgbaEmissive; } 2.1 将上述代码中的漫射光的反射率改为{1.0, 0.0, 0.0, 1.0,}后执行并观看效果。 2.2 将高光点的锐度改为1.0f执行并观看效果。 2.3 将物体本身亮度Emissive改为{1.0, 1.0, 1.0, 1.0,}后执行并观看效果。 2.4 将代码复原,做下面的灯光实验。 3、 修改灯光 //初始化灯光 HRESULT InitLight() { D3DLIGHT9 d3dLight; D3DXVECTOR3 vDir; //初始化灯光结构 ZeroMemory(&d3dLight, sizeof(D3DLIGHT9)); // d3dLight.Type = D3DLIGHT_POINT;//点光源 d3dLight.Type = D3DLIGHT_DIRECTIONAL;//方向光 // d3dLight.Type = D3DLIGHT_SPOT ;//聚光灯 //漫射光 d3dLight.Diffuse.r = 1.0f; d3dLight.Diffuse.g = 1.0f; d3dLight.Diffuse.b = 1.0f; //环境光 d3dLight.Ambient.r = 0.0f; d3dLight.Ambient.g = 0.0f; d3dLight.Ambient.b = 0.0f; //镜面光 d3dLight.Specular.r = 1.0f; d3dLight.Specular.g = 1.0f; d3dLight.Specular.b = 1.0f; //光源位置 d3dLight.Position.x = 0.0f; d3dLight.Position.y =0.0f; d3dLight.Position.z = -6.0f; //距离的衰减变量 d3dLight.Attenuation0 = 0.0f; d3dLight.Attenuation1 = 0.4f; d3dLight.Attenuation2 = 0.2f; //聚光灯的内外圆锥角 d3dLight.Theta = 0.1f; d3dLight.Phi = 1.0f; //聚光灯的从内向外衰减方式 d3dLight.Falloff = 1.0f; //光传播的方向 d3dLight.Direction = D3DXVECTOR3(1.0f,0.0f, 1.0f ); //光的范围 d3dLight.Range = 1000.0f; //注册光源,参数分别为光源在光源列表的序号和光源的结构体地址 if(FAILED(g_pD3DDevice->SetLight(0, &d3dLight))) { return E_FAIL; } //打开TRUE(或关闭FALSE)指定序号的光源 if(FAILED(g_pD3DDevice->LightEnable(0, TRUE))) { return E_FAIL; } //打开灯光 if(FAILED(g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE))) { return E_FAIL; } //设置环境光 if(FAILED(g_pD3DDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(0, 0,0)))) { return E_FAIL; } //启用镜面高光 g_pD3DDevice->SetRenderState( D3DRS_SPECULARENABLE, TRUE ); //重新规划化法向量 g_pD3DDevice->SetRenderState( D3DRS_NORMALIZENORMALS, TRUE ); return D3D_OK; } 3.1 修改灯光中的漫射光的值,改为 d3dLight.Diffuse.r = 1.0f; d3dLight.Diffuse.g = 0.0f; d3dLight.Diffuse.b = 0.0f; 执行并观看效果。 3.2 修改灯光中环境光的值,改为 d3dLight.Ambient.r = 0.0f; d3dLight.Ambient.g = 0.0f; d3dLight.Ambient.b = 1.0f; 执行并观看效果。 3.3 修改灯光中镜面光的值,改为: d3dLight.Specular.r = 1.0f; d3dLight.Specular.g = 1.0f; d3dLight.Specular.b = 1.0f; 执行并观看效果,小心转动立方体,直到看见镜面反光为止。 3.4 修改灯光的传播方向,改为 d3dLight.Direction = D3DXVECTOR3(0.0f,-1.0f, 1.0f ); 执行并观看效果。 --------------------------------------------------------------------------------------------------------------
本文档为【三维编程实验十、d3d光照应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_008332
暂无简介~
格式:doc
大小:38KB
软件:Word
页数:0
分类:互联网
上传时间:2018-09-11
浏览量:14