Ogre 2011-11-27

创建平面,点光源

class MyApplication :public ExampleApplication

{

public:

	void createScene()

	{

		// 定义一个平面

		// 参数1 平面的单位法线

		// 参数2 平面距离原点的距离

		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -200);



		// 利用定义的平面创建一个平面网格

		// 参数1 平面的名字;网格资源的名字

		// 参数2 资源组,如同c++中的命名空间

		// 参数3 平面的定义

		// 参数4,5 平面的大小

		// 参数6,7 平面的x,y轴上由多少个三角形组成

		// param8 normals If true, normals are created perpendicular to the plane

		// param9 numTexCoordSets The number of 2D texture coordinate sets created - 

		//        by default the corners are created to be the corner of the texture.

		Ogre::MeshManager::getSingleton().createPlane("plane", 

			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,

			plane, 1500, 1500, 20, 20,

			true, 1, 5, 5, Vector3::UNIT_Z

			);



		// 参数1 实体的名字

		// 参数2 创建实体用的网格的名字

		Ogre::Entity* ent = mSceneMgr->createEntity("lightpalneentity", "plane");

		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);

		ent->setMaterialName("Examples/BeachStones");



		Ogre::SceneNode* node = mSceneMgr->createSceneNode("node1");

		mSceneMgr->getRootSceneNode()->addChild(node);



		// 创建点光源

		Ogre::Light* light1 = mSceneMgr->createLight("light1");

		light1->setType(Ogre::Light::LT_POINT);

		light1->setPosition(0, 20, 0);

		light1->setDiffuseColour(1.0f, 1.0f, 1.0f);



		// 将创建的实体设置在点光源的位置

		Ogre::Entity* lightEnt = mSceneMgr->createEntity("myentity", "sphere.mesh");

		Ogre::SceneNode* node3 = node->createChildSceneNode("node3");

		node3->setScale(0.1f, 0.1f, 0.1f);

		node3->setPosition(0, 20, 0);

		node3->attachObject(lightEnt);



		// 创建点光源2

		Ogre::Light* light2 = mSceneMgr->createLight("light2");

		light2->setType(Ogre::Light::LT_POINT);

		light2->setPosition(20, 20,20);

		light2->setDiffuseColour(1.0f, 0.0f, 0.0f);



		// 将创建的实体设置在点光源2的位置

		Ogre::Entity* lightEnt2 = mSceneMgr->createEntity("myentity2", "sphere.mesh");

		Ogre::SceneNode* node4 = node->createChildSceneNode("node4");

		node4->setScale(0.1f, 0.1f, 0.1f);

		node4->setPosition(20, 20, 20);

		node4->attachObject(lightEnt2);

	}

private:

};

  

spotlight

class MyApplication :public ExampleApplication

{

public:

	void createScene()

	{

		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -200);

		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("lightpalneentity", "plane");

		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);

		ent->setMaterialName("Examples/BeachStones");



		Ogre::SceneNode* node = mSceneMgr->createSceneNode("node1");

		mSceneMgr->getRootSceneNode()->addChild(node);



		Ogre::SceneNode* node2 = node->createChildSceneNode("node2");

		node2->setPosition(0, 100, 0);

		Ogre::Light* light2 = mSceneMgr->createLight("light2");

		light2->setType(Ogre::Light::LT_SPOTLIGHT);

		light2->setDirection(Ogre::Vector3(1, -1, 0));

		light2->setSpotlightInnerAngle(Ogre::Degree(5.0f));

		light2->setSpotlightOuterAngle(Ogre::Degree(45.0f));

		light2->setSpotlightFalloff(0.0f);

		light2->setDiffuseColour(Ogre::ColourValue(0.0f, 1.0f, 0.0f));

		node2->attachObject(light2);



		Ogre::SceneNode* node3 = node2->createChildSceneNode("node3");

		node3->setPosition(0, 100, 0);

		Ogre::Entity* sphere = mSceneMgr->createEntity("sphereentity", "sphere.mesh");

		node3->attachObject(sphere);

	}

private:

};

  

directionallight + shadow

class MyApplication :public ExampleApplication

{

public:

	void createScene()

	{

		// 先用定义的平面创建一个网格,再用创建的网格构造一个实体

		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -200);

		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("lightpalneentity", "plane");

		Ogre::SceneNode* node = mSceneMgr->createSceneNode("node");

		mSceneMgr->getRootSceneNode()->addChild(node);

		node->attachObject(ent);

		ent->setMaterialName("Examples/BeachStones");



		// 方向光不用设置位置

		Ogre::Light* light = mSceneMgr->createLight("light");

		light->setType(Ogre::Light::LT_DIRECTIONAL);

		light->setDiffuseColour(Ogre::ColourValue(1.0f, 1.0f, 1.0f));

		light->setDirection(Ogre::Vector3(1, -1, 0));



		Ogre::Entity* ent2 = mSceneMgr->createEntity("sinbad2", "Sinbad.mesh");

		Ogre::SceneNode* node2 = mSceneMgr->createSceneNode("scenenode2");

		node->addChild(node2);

		node2->setScale(3.0f, 3.0f, 3.0f);

		node2->setPosition(Ogre::Vector3(0.0f, 1.0f, 0.0f));

		node2->attachObject(ent2);



		// 设置阴影

		mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);

	}

private:

};

  

创建摄像机,视口

class MyApplication :public ExampleApplication

{

public:



	void createCamera()

	{

		mCamera = mSceneMgr->createCamera("mycamera");

		mCamera->setPosition(0, 100, 200);

		mCamera->lookAt(0, 0, 0);

		mCamera->setNearClipDistance(50);

		//mCamera->setFarClipDistance(2000);

		// the same effect as press R

		mCamera->setPolygonMode(Ogre::PM_WIREFRAME);

	}



	void createViewports()

	{

		// create a viewport

		Ogre::Viewport* vp = mWindow->addViewport(mCamera);

		// set viewport's background color

		vp->setBackgroundColour(Ogre::ColourValue(0.0f, 0.0f, 1.0f));

		// set aspect ratio

		mCamera->setAspectRatio(Real(vp->getActualWidth() / vp->getActualHeight()));

	}



	void createScene()

	{

		// 先用定义的平面创建一个网格,再用创建的网格构造一个实体

		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -200);

		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("lightpalneentity", "plane");

		Ogre::SceneNode* node = mSceneMgr->createSceneNode("node");

		mSceneMgr->getRootSceneNode()->addChild(node);

		node->attachObject(ent);

		ent->setMaterialName("Examples/BeachStones");



		// 方向光不用设置位置

		Ogre::Light* light = mSceneMgr->createLight("light");

		light->setType(Ogre::Light::LT_DIRECTIONAL);

		light->setDiffuseColour(Ogre::ColourValue(1.0f, 1.0f, 1.0f));

		light->setDirection(Ogre::Vector3(1, -1, 0));



		Ogre::Entity* ent2 = mSceneMgr->createEntity("sinbad2", "Sinbad.mesh");

		Ogre::SceneNode* node2 = mSceneMgr->createSceneNode("scenenode2");

		node->addChild(node2);

		node2->setScale(3.0f, 3.0f, 3.0f);

		node2->setPosition(Ogre::Vector3(0.0f, 4.0f, 0.0f));

		node2->attachObject(ent2);



		// 设置阴影

		mSceneMgr->setShadowTechnique(Ogre::SHADOWTYPE_STENCIL_ADDITIVE);

	}

private:

};

  

  

 

你可能感兴趣的:(r)