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)); }
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"); }
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; }