// Loads the selected scene HRESULT LoadScene() { memset( g_strRawDEMDataFile, 0, sizeof(g_strRawDEMDataFile) ); memset( g_strEncodedRQTTriangFile, 0, sizeof(g_strEncodedRQTTriangFile) ); // Get selected config file int iSelectedConfigFile = 0; // Parse the config file if( FAILED(ParseConfigurationFile( g_ConfigFiles[iSelectedConfigFile].c_str() )) ) { //LOG_ERROR(_T("Failed to load config file %s"), g_ConfigFiles[iSelectedConfigFile].c_str() ); return E_FAIL; } g_TerrainRenderParams.m_fElevationSamplingInterval = g_fElevationSamplingInterval; // Create data source try { g_pElevDataSource.reset( new CElevationDataSource(g_strRawDEMDataFile, g_iPatchSize) ); } catch(const std::exception &) { LOG_ERROR(_T("Failed to create elevation data source")); return E_FAIL; } g_TerrainRenderParams.m_iNumLevelsInPatchHierarchy = g_pElevDataSource->GetNumLevelsInHierarchy(); g_TerrainRenderParams.m_fGlobalMinElevation = g_pElevDataSource->GetGlobalMinElevation() * g_fElevationScale ; g_TerrainRenderParams.m_fGlobalMaxElevation = g_pElevDataSource->GetGlobalMaxElevation() * g_fElevationScale ; g_TerrainRenderParams.m_iPatchSize = g_pElevDataSource->GetPatchSize(); g_TerrainRenderParams.m_fElevationScale = g_fElevationScale; return S_OK; }
void App::UpdateSNBTerrain() { if (!terrainload_) return; ActiveCam_->getFrom((float*)g_CameraPos); ActiveCam_->getTo((float*)g_CameraLookAt); // Currently intersections with the base mesh are not supported D3DXVECTOR3 StartPoint; StartPoint.x = g_CameraPos.x; StartPoint.y = g_pElevDataSource->GetGlobalMinElevation()*g_fElevationScale - g_fElevationSamplingInterval; StartPoint.z = g_CameraPos.z; float DistToSurface = 0.f; g_TerrainDX11Render.RayCast(StartPoint, D3DXVECTOR3(0,1,0), &DistToSurface); float fTerrainHeightUnderCamera = StartPoint.y + DistToSurface; float fMinimalDistToSurfae = max(ActiveCam_->GetNear() *2, g_fElevationSamplingInterval * 5.f); fTerrainHeightUnderCamera += fMinimalDistToSurfae; if( g_CameraPos.y < fTerrainHeightUnderCamera ) { g_CameraPos.y = Min(3000.f, fTerrainHeightUnderCamera); D3DXVECTOR3 dir; ActiveCam_->getDir((float*)dir); g_CameraLookAt = g_CameraPos + dir; //g_Camera.SetViewParams( &g_CameraPos, &g_CameraLookAt ); ActiveCam_->setFrom((float*)g_CameraPos); ActiveCam_->setTo((float*)g_CameraLookAt); ActiveCam_->computeModelView(); } BaseCamera* pCam = GetApp()->ActiveCam_; //D3DXMATRIX mProj; //D3DXMATRIX mView; //const unsigned int size16 = sizeof(float) * 16; //memcpy(&mView, pCam->getViewMatrix(), size16); //memcpy(&mProj, pCam->getProjectionMatrix(), size16); g_TerrainDX11Render.UpdateModel( g_CameraPos, pCam->getProjectionMatrix() ); }