Пример #1
0
void buildGrassLand(ISceneManager* smgr)
{
	IMeshManager* meshManager = IMeshManager::getInstance();

	std::string rawFileName("terrain-heightmap4.raw");
	ITerrainMesh* terrainMesh = meshManager->createTerrainMesh("terrain", rawFileName,
		10.0f, 0.3f, false, true, 1.0f);

	ITerrainNode* terrainNode = smgr->addTerrainNode(terrainMesh);
	terrainNode->setMaterialName("terrain/terrain_material");

	f32 range = 100.0f;
	f32 grassWidth = 10.0f;
	f32 grassHeight = 10.0f;

	const u32 grassCount = 5000;
	const f32 grassY = 0;
	std::vector<XMFLOAT3> v(grassCount);
	for (u32 i = 0; i < grassCount; i++)
	{
		v[i].x = math::RandomFloat(-range, range);
		v[i].y = grassY;
		v[i].z = math::RandomFloat(-range, range);
	}

	math::SAxisAlignedBox aabb;
	aabb.Center = XMFLOAT3(0, grassHeight * 0.5f, 0);
	aabb.Extents = XMFLOAT3(range + grassWidth * 0.5f, grassHeight, range + grassWidth * 0.5f); 

	g_grassLand = new GrassLand(smgr, terrainNode, v, range * 2, XMFLOAT2(grassWidth, grassHeight));
}
Пример #2
0
void EditorScene::setupTerrain()
{
	IMeshManager* meshManager = IMeshManager::getInstance();
	std::string rawFileName("terrain-heightmap4.raw");
	
	/*
	ITerrainMesh* terrainMesh = meshManager->createTerrainMesh("terrain", rawFileName,
		10.0f, 1.0f, false, true, 1.0f);
	mTerrainNode = mSceneManager->addTerrainNode(terrainMesh);
	mTerrainNode->setMaterialName("terrain/terrain_material");
	*/
	
	ITerrainMesh* terrainMesh = meshManager->createTerrainMesh("terrain", 
		rawFileName, 5.0f, 0.3f, true, false, 1.0f);
	mTerrainNode = mSceneManager->addTerrainNode(terrainMesh);
	mTerrainNode->setMaterialName("terrain/grass_tessellation_material");

}
Пример #3
0
int main()
{
	SDeviceContextSettings settings;
	settings.MultiSamplingCount = 4;
	settings.MultiSamplingQuality = 32;

	IApplication* device = gf::createDevice(EDT_DIRECT3D11, SCREEN_WIDTH, SCREEN_HEIGHT, EWS_NONE, true, settings);
	IVideoDriver* driver = device->getVideoDriver();
	ISceneManager* smgr = device->createSceneManager();
	IMeshManager* meshManager = driver->getMeshManager();
	IMaterialManager* materialManager = driver->getMaterialManager();
	ITextureManager* textureManager = driver->getTextureManager();

	IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager();
	resourceGroupManager->init("Resources.cfg");
//	resourceGroupManager->loadResourceGroup("General");

	ILightNode* light = smgr->addDirectionalLight(1, nullptr, XMFLOAT3(3.0f, -2.0f, 1.5f));
	light->setSpecular(XMFLOAT4(1.0f, 1.0f, 1.0f, 32.0f));
	light->setDiffuse(XMFLOAT4(0.4f, 0.4f, 0.4f, 1.0f));

	ILightNode* light2 = smgr->addDirectionalLight(2, nullptr, XMFLOAT3(-2.0f, -3.0f, -2.0f));
	light2->setSpecular(XMFLOAT4(1.0f, 1.0f, 1.0f, 32.0f));
	light2->setDiffuse(XMFLOAT4(0.5f, 0.5f, 0.5f, 1.0f));

	ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 30.0f, -4.0f), XMFLOAT3(0, 30.0f, 0.0f), XMFLOAT3(0, 1.0f, 0), true);
	camera->setViewWidth(300);
	camera->setViewHeight(200);

	char caption[200];
	
	std::string rawFileName("heightmap.raw");
	ITerrainMesh* mesh = meshManager->createTerrainMesh("terrain", rawFileName,
		3.0f, 0.4f, false, true, 1.0f);

	ITerrainNode* terrainNode = smgr->addTerrainNode(mesh);
	//terrainNode->setMaterialName("terrain/tessellation_material");
	terrainNode->setMaterialName("terrain/terrain_material");

	ITextureCube* skyTexture = textureManager->loadCubeTexture("Snow.dds");
	smgr->setSkyDome(skyTexture);

	
	IRenderTarget* pRenderTarget = textureManager->getRenderTarget("target1");

		
	ITimer* timer = device->getTimer();
	timer->reset();

	while (device->run())
	{
		const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
		driver->beginScene(true, true, clearColor);

		u32 ms = timer->tick();
		float dt = ms * 0.001f;
		updateCamera(camera, dt);

		XMFLOAT3 camPos = camera->getPosition();
		float terrainHeight = terrainNode->getHeight(camPos.x, camPos.z, true);
		camPos.y = terrainHeight + 3.0f;
		//camera->setPosition(camPos);

		smgr->update(ms);
		smgr->drawAll();

		driver->endScene();

		u32 num = smgr->getRenderedMeshNum();

		sprintf(caption, "FPS:%f num:%d", getFps(dt), num);
		device->setWindowCaption(caption);
	}

	smgr->destroy();
	device->drop();

	return 0;
}