예제 #1
0
        public unsafe bool export_XSD(string filename, ExportSettings expSettings, ref Export360.ExportResults results)
        {
            DateTime n = DateTime.Now;

            //update before we do anything
            TerrainGlobals.getEditor().getSimRep().updateForExport();// update(false);//

            headerToChunk();

            results.terrainSimMemorySize = simDataToChunk();


            bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XSD");

            TimeSpan ts = DateTime.Now - n;

            results.terrainSimTime = ts.TotalMinutes;

            return(exportOK);
        }
예제 #2
0
        //-----------------------------------------------------------------------------------
        public bool export_XTH(string filename, ExportSettings expSettings, ref ExportResults results)
        {
            DateTime n = DateTime.Now;



            HeightsGen hg = new HeightsGen();

            hg.computeHeightField(256, 256, true, BMathLib.unitZ, 8);

            headerToChunk();
            heightFieldToChunk(hg, ref results); //turn our data into a ECF chunk
            heightFieldAlphaToChunk(ref results);
            bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XTH");

            hg.destroy();


            TimeSpan ts = DateTime.Now - n;

            results.terrainGPUHeighfieldTime = ts.TotalMinutes;

            return(exportOK);
        }
예제 #3
0
        public bool export_XTD(string filename, ExportSettings expSettings, ref ExportResults results)
        {
            DateTime start = DateTime.Now;

            //write the header for the entire XTD file
            XTDVisualHeader header = new XTDVisualHeader();

            header.version    = (int)eFileVersions.cXTDVersion;
            header.numXVerts  = TerrainGlobals.getTerrain().getNumXVerts();
            header.numXChunks = (int)(TerrainGlobals.getTerrain().getNumXVerts() / BTerrainQuadNode.cMaxWidth);
            header.tileScale  = TerrainGlobals.getTerrain().getTileScale();

            BBoundingBox simRepBB  = SimGlobals.getSimMain().getBBoxForDecalObjects();
            Vector3      visRepMin = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_min - new Vector3(0, header.tileScale, 0);
            Vector3      visRepMax = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_max + new Vector3(0, header.tileScale, 0);

            if (!CoreGlobals.mbLoadTerrainVisRep)
            {
                visRepMin = simRepBB.min;
                visRepMax = simRepBB.max;
            }


            header.worldMin = visRepMin;
            header.worldMax = visRepMax;
            header.endianSwap();


            //write our header first.
            ECF.ECFChunkHolder chunkHolder = new ECF.ECFChunkHolder();
            chunkHolder.mDataMemStream = new MemoryStream();
            BinaryWriter binWriter = new BinaryWriter(chunkHolder.mDataMemStream);

            binWriter.Write(ExportTo360.StructToByteArray(header));
            ExportTo360.mECF.addChunk((int)eXTD_ChunkID.cXTD_XTDHeader, chunkHolder, (int)chunkHolder.mDataMemStream.Length);
            binWriter.Close();
            binWriter = null;
            chunkHolder.Close();
            chunkHolder = null;

            header.endianSwap();


            generateGridChunks(ref header);

            writeAtlasToMemory(ref results);

            writeAOData(ref results);

            writeAlpha(ref results);

            writeTessData(expSettings.RefineTerrain, expSettings.RefineEpsilon, expSettings.RefineMinorityBias, ref results);

            writeLightData(ref expSettings, ref results);

            bool exportOK = ExportTo360.safeECFFileWrite(filename, ".XTD");


            TimeSpan ts = DateTime.Now - start;

            results.totalTime = ts.TotalMinutes;

            return(exportOK);
        }