聚光灯比点光源多了方向,还多了内光圈和外光圈了的角度。因此,初始化灯光的结构时,就需要设置它们才能让聚光灯有效里显示出来。程序初始化如下:
//
//初始化灯光。
//蔡军生 2006/09/03
//
void CCAISpotLight::InitLight(void)
{
//
ZeroMemory( &m_meshMaterialFloor, sizeof(D3DMATERIAL9) );
m_meshMaterialFloor.Diffuse.r = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Diffuse.g = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Diffuse.b = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Diffuse.a = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Ambient.r = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Ambient.g = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Ambient.b = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialFloor.Ambient.a = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_pd3dDevice->SetMaterial( &m_meshMaterialFloor );
//聚光灯
ZeroMemory( &m_ligthSpot, sizeof(D3DLIGHT9) );
m_ligthSpot.Diffuse.r = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_ligthSpot.Diffuse.g = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_ligthSpot.Diffuse.b = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_ligthSpot.Diffuse.a = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_ligthSpot.Type = D3DLIGHT_SPOT;
m_ligthSpot.Position = D3DXVECTOR3( <chmetcnv w:st="on" unitname="F" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0.0f</chmetcnv>, <chmetcnv w:st="on" unitname="F" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0">2.0f</chmetcnv>, <chmetcnv w:st="on" unitname="F" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0.0f</chmetcnv> );
//
m_ligthSpot.Direction = D3DXVECTOR3( 0, -1.0, 0 );
m_ligthSpot.Attenuation0 = <chmetcnv w:st="on" unitname="F" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0.0f</chmetcnv>;
m_ligthSpot.Attenuation1 = <chmetcnv w:st="on" unitname="F" sourcevalue=".1" hasspace="False" negative="False" numbertype="1" tcsc="0">0.1f</chmetcnv>;
m_ligthSpot.Attenuation2 = <chmetcnv w:st="on" unitname="F" sourcevalue="0" hasspace="False" negative="False" numbertype="1" tcsc="0">0.0f</chmetcnv>;
m_ligthSpot.Range = <chmetcnv w:st="on" unitname="F" sourcevalue="30" hasspace="False" negative="False" numbertype="1" tcsc="0">30.0f</chmetcnv>;
//
m_ligthSpot.Theta = D3DX_PI/10;
m_ligthSpot.Phi = D3DX_PI/4;
m_ligthSpot.Falloff = 3.0;
m_pd3dDevice->SetLight( 0, &m_ligthSpot );
//
ZeroMemory( &m_meshMaterialSpot, sizeof(D3DMATERIAL9) );
m_meshMaterialSpot.Emissive.r = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialSpot.Emissive.g = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialSpot.Emissive.b = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
m_meshMaterialSpot.Emissive.a = <chmetcnv w:st="on" unitname="F" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1.0f</chmetcnv>;
}
上面首先设置地板的材料颜色,接着就初始化聚光灯的结构m_ligthSpot,这里选择灯光类型为D3DLIGHT_SPOT,颜色是白色。还设置了方向和位置,还有内圈的角度为D3DX_PI/10,而外圈的角度为D3DX_PI/4,从内光圈到外光圈衰减为3.0。
其它渲染部份,同点光源是一样的。
相关推荐
Unity3D从入门到精通.pdf, Unity3D 入门推荐pdf, 学习Unity3D必备
使用unity3d进行游戏开发_从入门到精通1-4章
用Python和Pygame写游戏-从入门到精通(22) 播放长时间的背景音乐。一个建议播放器的例程。 额外提高部分 用Python和Pygame写游戏-从入门到精通(py2exe编) 使用py2exe将pygame脚本转换为exe可执行文件 用Python和...
使用unity3d进行游戏开发_从入门到精通_02.pdf
unity3d从入门到精通中文教程是国内第一本以面向对象和项目流程开发角度,全面系统介绍 Unity3D 的书籍。本书以具体项目结构开发的角度,结合 Unity3D 层级式的综合开发环境、视觉化编辑、详细的属性编辑器和动态的...
使用unity3d进行游戏开发_从入门到精通_01
使用unity3d进行游戏开发_从入门到精通_01.pdf
使用unity3d进行游戏开发_从入门到精通_03.pdf
这本教材包含了基本的3d游戏程序设计,从基本的direct3d 讲起,通俗易懂。
Unity官方年度巨献,基于5.X新版本,为游戏开发者带来一场饕餮盛宴 <br/>本书基于Unity 5.0软件及以上版本,对Unity 5 中的大量图形改进和扩展的编辑器功能集进行讲解。另外,对Unity Cloud Build的使用进行详细...
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具
使用unity3d进行游戏开发从入门到精通
Unity3D游戏引擎实战开发从入门到精通源码
《Unity 5.X从入门到精通》基于Unity 5.0软件及以上版本,对Unity 5 中的大量图形改进和扩展的编辑器功能集进行讲解。另外,对Unity Cloud Build的使用进行详细介绍,使开发者通过云进行游戏和应用开发。 为了使...
Unity 目前最新官方教材《Unity 5.x从入门到精通》 配套光盘资源, 文件较大,百度网盘供源。
使用unity3d进行游戏开发_从入门到精通_02
使用unity3d进行游戏开发_从入门到精通_04.pdf
D Studio Max,常简称为3d Max [1] 或3ds MAX,是...3D Studio Max + Windows NT组合的出现一下子降低了CG制作的门槛,首先开始运用在电脑游戏中的动画制作。而此教程从各方面教你如何使用3dmax。萌新也不怕学不会啦。