0009Ogre实现起伏定型,云雾效果

在Ogre中共有继承基类ExampleApplication.h可以实现很多应用,比如今天根据教程实现的起伏地形,云和雾灯效果。

#include "ExampleApplication.h"


class Example25FrameListener:public Ogre::FrameListener
{
private:
	Ogre::SceneNode* _node;

public:
	Example25FrameListener(Ogre::SceneNode* node)
	{
		_node=node;
	}
	bool frameStarted(const Ogre::FrameEvent &evt)
	{
		_node->translate(Ogre::Vector3(0.1,0,0));     //用(0.1,0,0)来变化节点node以图产生移动(运动)
		return true;
	}

	Ogre::FrameListener* FrameListener;

public:
	Example25FrameListener()
	{
		FrameListener=NULL;
	}
	~Example25FrameListener()
	{
		if(FrameListener)
		{delete FrameListener;}
	}
};

class TutorialApplication : public ExampleApplication
{
private:
	Ogre::SceneNode* _SinbadNode;

protected:

	void chooseSceneManager(void)      //to choose Scene Manager
	{
		mSceneMgr=mRoot->createSceneManager(ST_EXTERIOR_CLOSE);   //choose "ST_EXTERIOR_CLOSE"type Scene Manager
		ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
	}
	 void createScene(void)
	{
		//adding viewport and fog   ,must set before adding a ground
		 	ColourValue fadeColour(0.9,0.7,0.9);
		mWindow->getViewport(0)->setBackgroundColour(fadeColour);
        mSceneMgr->setFog(FOG_LINEAR,fadeColour,0.001f,10,500);   
		//adding a ground
		/*mSceneMgr->setWorldGeometry("terrain.cfg");*/

		//Create a plane
		Ogre::Plane plane(Vector3::UNIT_Y,-10);
		Ogre::MeshManager::getSingleton().createPlane("plane",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
			plane,1500,1500,200,200,true,1,5,5,Vector3::UNIT_Z);
		Ogre::Entity* ent=mSceneMgr->createEntity("LightPlaneEntity","plane");
		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
		ent->setMaterialName("Examples/Rockwall");

		//adding light
		Ogre::Light* light=mSceneMgr->createLight("light1");
		light->setType(Ogre::Light::LT_DIRECTIONAL);
		light->setDirection(Ogre::Vector3(10,0,-10));

		//adding entity
		Ogre::SceneNode* node=mSceneMgr->createSceneNode("node1");
		mSceneMgr->getRootSceneNode()->addChild(node);
		Ogre::Entity* Sinbad=mSceneMgr->createEntity("Ninja","ninja.mesh");
		_SinbadNode=node->createChildSceneNode("NinjaNode");
		_SinbadNode->setScale(0.25f,0.25f,0.25f);
		_SinbadNode->setPosition(Ogre::Vector3(400.0f,50.0f,400.0f));
		_SinbadNode->attachObject(Sinbad);
		_SinbadNode->yaw(Degree(-135));

		//adding shadow
		mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
		//adding plane sky
		Plane plane1;
		plane1.d=1000;
		plane1.normal=Vector3::NEGATIVE_UNIT_Y;
		mSceneMgr->setSkyPlane(false,plane1,"Examples/SpaceSkyPlane",1500,75,true,1.5f,150,150);

		mSceneMgr->setSkyDome(true,"Examples/CloudySky",5,8,2000,true);

	
	  
	}
	//adding a camera 
virtual void createCamera(void)
{
        mCamera=mSceneMgr->createCamera("MyCamera1");
		mCamera->setPosition(550.0f,120.0f,550.0f);
		mCamera->lookAt(400.0f,100.0f,400.0f);
		mCamera->setNearClipDistance(5);
}

public:
	TutorialApplication(){}
	~TutorialApplication(){}

};

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine,
INT )
#else
int main(int argc, char **argv)
#endif
{
// Create application object
TutorialApplication app;
try {
app.go();
} catch( Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
fprintf(stderr, "An exception has occured: %s\n",
e.getFullDescription().c_str());
#endif
}return 0;

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值