コード例 #1
0
 void renderTerrain()
 {
     TerrainGlobals.getTerrainExportRender().setPassNum(0);
     TerrainGlobals.getTerrainExportRender().preRenderSetup();
     TerrainGlobals.getTerrainExportRender().renderAll();
     TerrainGlobals.getTerrainExportRender().postRender();
 }
コード例 #2
0
            void generateNextDepthLayer(bool renderWorldObjects)
            {
                //CLM this provides accurate depth peeling results (in ISO view...)
                BRenderDevice.getDevice().Clear(ClearFlags.ZBuffer | ClearFlags.Target, (unchecked ((int)0x00000000)), 0, 0);

                TerrainGlobals.getTerrainExportRender().mTerrainGPUShader.mShader.SetValue(mShaderPrevDepthTexture, mDepthBufferC);
                BRenderDevice.getDevice().SetRenderState(RenderStates.ZBufferFunction, (int)Compare.Greater);

                mOC.Issue(IssueFlags.Begin);

                renderTerrain();
                if (renderWorldObjects)
                {
                    renderWoldObjects();
                }

                mOC.Issue(IssueFlags.End);
            }
コード例 #3
0
        public eReturnCodes generateLighting(string targetFile, string destDir, string issuingName, AmbientOcclusion.eAOQuality quality, int totalNumberOfSections, int targetSectionIndex)
        {
            mAoNumSections  = totalNumberOfSections;
            mAoSectionIndex = targetSectionIndex;
            outputDir       = destDir;

            //load our TLD file
            if (targetFile != "" && File.Exists(targetFile))
            {
                if (!loadTempDataFile(targetFile))
                {
                    return(eReturnCodes.cRC_TDL_LOAD_ERROR);
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("TDL File not specified, or not available.");
                Console.ForegroundColor = ConsoleColor.White;
                return(eReturnCodes.cRC_TDL_NOT_FOUND);
            }



            ////////////////////////////////////////////////////////////////////////////////

            TerrainGlobals.getTerrainExportRender().init();
            ModelManager.init();

            // AmbientOcclusion.eAOQuality quality = AmbientOcclusion.eAOQuality.cAO_Worst;
            int numSamples        = (int)quality;
            int samplesPerSection = (int)(numSamples / mAoNumSections);
            int startSampleCount  = samplesPerSection * mAoSectionIndex;
            int endSampleCount    = startSampleCount + samplesPerSection;

            AmbientOcclusion ao         = new AmbientOcclusion();
            float            totalTime  = 0;
            float            peelTime   = 0;
            float            gatherTime = 0;

            ao.calcualteAO(quality, true, ref totalTime, ref peelTime, ref gatherTime, startSampleCount, endSampleCount);
            ao.destroy();
            ao = null;



            TerrainGlobals.getTerrainExportRender().destroy();
            ModelManager.destroy();


            //////////////////////////////////////////////////////////////////////////
            bool writingOK = true;

            {
                const int cMajik = 0xA001;

                string ouputDumpFilename = outputDir + @"\" + issuingName + ".AO" + targetSectionIndex;

                if (!Directory.Exists(outputDir))
                {
                    Directory.CreateDirectory(outputDir);
                }
                FileStream s = null;
                try
                {
                    s = File.Open(ouputDumpFilename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
                }
                catch (Exception e)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Error writing result to" + ouputDumpFilename);
                    Console.ForegroundColor = ConsoleColor.White;
                    writingOK = false;
                }

                if (writingOK)
                {
                    BinaryWriter f      = new BinaryWriter(s);
                    int          width  = (int)TerrainGlobals.getTerrain().mNumXVerts;
                    int          height = (int)TerrainGlobals.getTerrain().mNumZVerts;

                    //write our header.
                    f.Write(cMajik);
                    f.Write(mAoNumSections);
                    f.Write(mAoSectionIndex);
                    f.Write(numSamples);
                    f.Write(startSampleCount);
                    f.Write(endSampleCount);

                    f.Write(width);
                    f.Write(height);
                    for (int x = 0; x < width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            float AOVal = TerrainGlobals.getTerrain().getAmbientOcclusion(x, y);
                            f.Write(AOVal);
                        }
                    }

                    f.Close();
                    s.Close();
                }
            }
            if (!writingOK)
            {
                return(eReturnCodes.cRC_OUTPUT_WRITE_ERROR);
            }


            return(eReturnCodes.cRC_OK);
        }
コード例 #4
0
            //-----------------------


            //-------------------------
            void loadShader()
            {
                //grab these values from the TerrainRender shader, so we don't clog that pipe up any more than we have to..
                mShaderPrevDepthTexture = TerrainGlobals.getTerrainExportRender().mTerrainGPUShader.getEffectParam("prevDepthTexture");
            }