public void Dispose() { string nodeName = String.Format("TerrainPage[{0},{1}]", (int)(location.x / TerrainManager.oneMeter), (int)(location.z / TerrainManager.oneMeter)); sceneNode.DetachObject(this); // DEBUG - Console.WriteLine("Disposing {0}", nodeName); sceneNode.Creator.DestroySceneNode(nodeName); terrainMaterial.Dispose(); terrainMaterial = null; FreeBuffers(); }
public TerrainPage(Vector3 location, Page page) { this.location = location; pageCoord = new PageCoord(location, TerrainManager.Instance.PageSize); terrainMaterial = TerrainManager.Instance.TerrainMaterialConfig.NewTerrainMaterial(pageCoord.X, pageCoord.Z); currentPage = page; Debug.Assert(location == currentPage.Location, "creating TerrainPage with page at different location"); numTiles = currentPage.NumTiles; patchSize = TerrainManager.Instance.PageSize / numTiles; // set up the page height maps for this page of terrain subPageSize = TerrainManager.Instance.SubPageSize; int subPagesPerPage = TerrainManager.Instance.PageSize / subPageSize; pageHeightMap = new PageHeightMap(subPagesPerPage, TerrainManager.Instance.PageSize, TerrainManager.Instance.MaxMetersPerSample, TerrainManager.Instance.MinMetersPerSample); pageHeightMap.Location = location; // create and position a scene node for this terrain page string nodeName = String.Format("TerrainPage[{0},{1}]", (int)(location.x / TerrainManager.oneMeter), (int)(location.z / TerrainManager.oneMeter)); // DEBUG - Console.WriteLine("Creating {0}", name); sceneNode = TerrainManager.Instance.WorldRootSceneNode.CreateChildSceneNode(nodeName); sceneNode.Position = location; sceneNode.AttachObject(this); // create the render operation renderOp = new RenderOperation(); renderOp.operationType = OperationType.TriangleList; renderOp.useIndices = true; CreatePatches(); SetCastShadows(); UpdateBounds(); TerrainManager.Instance.ShadowConfig.ShadowTechniqueChange += ShadowTechniqueChangeHandler; }
public void UpdateMaterial() { terrainMaterial.Dispose(); terrainMaterial = TerrainManager.Instance.TerrainMaterialConfig.NewTerrainMaterial(pageCoord.X, pageCoord.Z); }