欢迎来到天天文库
浏览记录
ID:28000257
大小:42.50 KB
页数:8页
时间:2018-12-07
《28.天空盒SkyBoxSceneNode类.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、28.天空盒SkyBoxSceneNode类以上代码完全参考自2.8天空盒,用的是文章中的第二种方法,即使用一张立方贴图实现天空盒,代码如下:namespaceStunEngine.SceneNodes{//////天空盒///publicclassSkyBoxSceneNode:Renderable3DSceneNode{#region构造函数和成员变量//////天空盒使用的材质///privateSkyBoxMaterialmaterial;//////创建一个天空盒,需指
2、定天空盒使用的TextureCube的名称//////引擎///所属场景///天空盒纹理名称publicSkyBoxSceneNode(StunXnaGEengine,ScenesetScene,stringsetSkyboxTextureName):base(engine,setScene){material=newSkyBoxMaterial(engi
3、ne,engine.Content.Load("Effects\SkyBox"));material.CubeTextureName=setSkyboxTextureName;//实现IMaterial接口Imaterial=(IMaterial)material;//不对天空盒进行剔除操作this.DisableCulling=true;this.DisableUpdateCulling=true;}#endregion//////获取天空盒使用的材质///publicSkyBoxMaterialMaterial{
4、get{returnmaterial;}}//////初始化天空盒,创建天空盒顶点缓冲。///publicoverridevoidInitialize(){base.Initialize();this.UpdateOrder=SceneNodeOrdering.EnvironmentMap.GetValue();//创建天空盒顶点数据this.mesh=MeshBuilder.CreateSkybox(engine.GraphicsDevice);}//////绘制天空盒。//////
5、name="gameTime">///publicoverrideintDraw(GameTimegameTime,booluseReflection){//当绘制天空盒时需使Z缓冲不可写,但不要忘记在绘制完天空盒后重新使Z缓冲可写。engine.GraphicsDevice.RenderState.DepthBufferEnable=false;engine.GraphicsDevice.RenderState.DepthBufferWriteEnable=false;inttotalPrimitives=base.
6、Draw(gameTime,useReflection);engine.GraphicsDevice.RenderState.DepthBufferWriteEnable=true;engine.GraphicsDevice.RenderState.DepthBufferEnable=true;returntotalPrimitives;}#region单元测试#ifDEBUG//////测试SkyBoxSceneNode类///publicstaticvoidTestSkyBoxSceneNode(){SkyBoxSceneNode
7、skybox=null;TestGame.Start("测试SkyBoxSceneNode类",delegate{//添加一个天空盒skybox=newSkyBoxSceneNode(TestGame.engine,TestGame.scene,"Textures/SkyCubeMap");TestGame.scene.AddNode(skybox);},delegate{//按空格键切换一张天空盒纹理if(Input.KeyboardSpaceJustPressed){if(skybox.Material.CubeTextu
此文档下载收益归作者所有