Ejemplo n.º 1
0
        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;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="size">size of the terrain patch in meters</param>
        /// <param name="metersPerSample">meters per sample</param>
        /// <param name="pageHeightMap">which page heightmap to use to build the patch</param>
        /// <param name="startX">starting X offset of the patch within the page (in meters)</param>
        /// <param name="startZ">starting Z offset of the patch within the page (in meters)</param>
        public TerrainPatch(TerrainPage terrainPage, int size, int metersPerSample, int startX, int startZ)
        {
            this.terrainPage = terrainPage;
            patchSize = size;

            // save patch params
            this.pageHeightMap = terrainPage.PageHeightMap;
            this.metersPerSample = metersPerSample;
            this.startX = startX;
            this.startZ = startZ;

            patchLoc = new Vector3(
                terrainPage.Location.x + startX * TerrainManager.oneMeter,
                0,
                terrainPage.Location.z + startZ * TerrainManager.oneMeter);

            numSamples = patchSize / metersPerSample;

            pageHeightMap.SetPatchLOD(startX, startZ, patchSize, metersPerSample);

            ComputeStitchSize();
        }
Ejemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="size">size of the terrain patch in meters</param>
        /// <param name="metersPerSample">meters per sample</param>
        /// <param name="pageHeightMap">which page heightmap to use to build the patch</param>
        /// <param name="startX">starting X offset of the patch within the page (in meters)</param>
        /// <param name="startZ">starting Z offset of the patch within the page (in meters)</param>
        public TerrainPatch(TerrainPage terrainPage, int size, int metersPerSample, int startX, int startZ)
        {
            this.terrainPage = terrainPage;
            patchSize        = size;

            // save patch params
            this.pageHeightMap   = terrainPage.PageHeightMap;
            this.metersPerSample = metersPerSample;
            this.startX          = startX;
            this.startZ          = startZ;

            patchLoc = new Vector3(
                terrainPage.Location.x + startX * TerrainManager.oneMeter,
                0,
                terrainPage.Location.z + startZ * TerrainManager.oneMeter);

            numSamples = patchSize / metersPerSample;

            pageHeightMap.SetPatchLOD(startX, startZ, patchSize, metersPerSample);

            ComputeStitchSize();
        }
        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;
        }