Brute Force (HeightMap) For Terrain Rendering

Triangle Num:32768

FPS < 30

Environment: 6G-ddr3, i5-480m

Brute Force not very userful for nowadays game, due to its poor fps. I'm a novice for terrain rendering, maybe the "LOD" could increase the fps. 

How to do : Here is the principle and below is the code(yes, I use Ogre O>_<O).

void createScene()
	{
		// load terrain map
		if(myTerrain.LoadHeightMap("height.dat", TERRAIN_SIZE))
		{
			myTerrain.SetHeightScale(0.25f);
		}
		else
		{
			return;
		}

		//config the light
		/*Ogre::Light* light = mSceneMgr->createLight("Light1");
		light->setType(Ogre::Light::LT_DIRECTIONAL);
		light->setDirection(Ogre::Vector3(1,-1,0));*/

		Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create("myMaterialWithNoCulling",
			Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
		mat->setCullingMode(Ogre::CULL_NONE );
		mat->setSceneBlending(Ogre::SBT_ADD); 

		Ogre::ManualObject* manual = mSceneMgr->createManualObject("MyTerrain");
		manual->begin("myMaterialWithNoCulling", RenderOperation::OT_TRIANGLE_LIST);
		float fColor;
		for(int iz = 0; iz < TERRAIN_SIZE - 1; ++iz)
		{
			for(int ix = 0; ix < TERRAIN_SIZE - 1 ; ++ix)
			{

				fColor = myTerrain.GetTrueHeightAtPoint(ix, iz);
				manual->position(ix, myTerrain.GetScaledHeightAtPoint(ix,iz), iz);
				manual->colour(fColor, fColor, fColor);

				fColor = myTerrain.GetTrueHeightAtPoint(ix + 1, iz);
				manual->position(ix + 1, myTerrain.GetScaledHeightAtPoint(ix + 1,iz), iz);
				manual->colour(fColor, fColor, fColor);

				fColor = myTerrain.GetTrueHeightAtPoint(ix, iz + 1);
				manual->position(ix, myTerrain.GetScaledHeightAtPoint(ix,iz + 1), iz + 1);
				manual->colour(fColor, fColor, fColor);

				fColor = myTerrain.GetTrueHeightAtPoint(ix, iz + 1);
				manual->position(ix, myTerrain.GetScaledHeightAtPoint(ix,iz + 1), iz + 1);
				manual->colour(fColor, fColor, fColor);

				fColor = myTerrain.GetTrueHeightAtPoint(ix + 1, iz);
				manual->position(ix + 1, myTerrain.GetScaledHeightAtPoint(ix + 1,iz), iz);
				manual->colour(fColor, fColor, fColor);

				fColor = myTerrain.GetTrueHeightAtPoint(ix + 1, iz + 1);
				manual->position(ix + 1, myTerrain.GetScaledHeightAtPoint(ix + 1,iz + 1), iz + 1);
				manual->colour(fColor, fColor, fColor);
			}
		}

		manual->end();

		/*manual->convertToMesh("bruteForceTerrain");

		Ogre::Entity* terrainMesh = mSceneMgr->createEntity("bruteForceTerrain");*/

		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(manual);
	}

  

转载于:https://www.cnblogs.com/Baesky/archive/2012/02/12/Ogre_Brute_Terrain.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值