示例#1
0
        private void GenerateTerrainGeometries()
        {
            SettingsContainer Settings         = FileManager.MasteryFile.Settings;
            List <WorldFile>  ActiveWorldFiles = FileManager.MasteryFile.ActiveWorldFiles;

            for (int i = 0; i < ActiveWorldFiles.Count; i++)
            {
                bool HasGeometry = false;
                for (int j = 0; j < TerrainGeometries.Count; j++)
                {
                    if (ActiveWorldFiles[i] == TerrainGeometries[j].WorldFile)
                    {
                        HasGeometry = true;
                    }
                }

                if (!HasGeometry)
                {
                    Node3D Node = null;
                    for (int j = 0; j < RenderNodeLayers.Count; j++)
                    {
                        if (RenderNodeLayers[j].Name.Replace("Layer:", "") == ActiveWorldFiles[i].LODID + "")
                        {
                            Node = RenderNodeLayers[j];
                        }
                    }

                    if (Node != null)
                    {
                        TerrainGeometryContainer NewContainer = new TerrainGeometryContainer(Render, Settings, ActiveWorldFiles[i]);

                        //TerrainDeformableCoverContainer NewDeformedCover = new TerrainDeformableCoverContainer(Render,ActiveWorldFiles[i],NewContainer, Settings,FromBelowDepthTarget);

                        TerrainWaterContainer WaterContainer = new TerrainWaterContainer(
                            Render, NewContainer, ReflectionNode, RefractionNode, PropNode, ActiveWorldFiles[i], Settings, ActiveWorldFiles[i].GetPosition(), ReflectionRenderTarget, RefractionRenderTarget, DepthMapRenderTarget, FromBelowDepthTarget);

                        DepthMapRenderTarget.DebugTextureName = "SceneWaterDepthDebug";

                        TerrainGeometries.Add(NewContainer);
                        //DeformedTerrainGeometries.Add(NewDeformedCover);

                        WaterGeometries.Add(WaterContainer);

                        ReflectionNode.Attach(NewContainer.TerrainGeometry);
                        RefractionNode.Attach(NewContainer.TerrainGeometry);

                        Node.Attach(WaterContainer.Geom);
                        //Node.Attach(NewDeformedCover.Geom);
                        Node.Attach(NewContainer.TerrainGeometry);
                    }
                }
            }
        }
示例#2
0
        public void UpdateRenderTargets()
        {
            List <Geometry3D> ReflectionUpdateList = new List <Geometry3D>();
            List <Geometry3D> RefractionUpdateList = new List <Geometry3D>();
            List <Geometry3D> DepthUpdateList      = new List <Geometry3D>();

            if (ReflectionRenderTarget != null)
            {
                ReflectionUpdateList.AddRange(ReflectionRenderTarget.GeometryUpdateList);
                Render.DetachRenderTarget(ReflectionRenderTarget);
                //ReflectionRenderTarget.Dispose();
            }
            if (RefractionRenderTarget != null)
            {
                RefractionUpdateList.AddRange(RefractionRenderTarget.GeometryUpdateList);
                Render.DetachRenderTarget(RefractionRenderTarget);
                //RefractionRenderTarget.Dispose();
            }
            if (DepthMapRenderTarget != null)
            {
                DepthUpdateList.AddRange(DepthMapRenderTarget.GeometryUpdateList);
                Render.DetachRenderTarget(DepthMapRenderTarget);
                //DepthMapRenderTarget.Dispose();
            }


            Settings = FileManager.MasteryFile.Settings;

            PropStructureContainer = new WorldPropStructureContainer(Render);

            List <Geometry3D> PropBatches = PropStructureContainer.GetGeometries(-1);

            RenderNode.AttachRange(PropBatches);
            ReflectionNode.AttachRange(PropBatches);
            RefractionNode.AttachRange(PropBatches);
            PropNode.AttachRange(PropBatches);

            ReflectionRenderTarget = new SceneRenderTarget("ReflectionMap", ReflectionNode, Render.Graphics, Render.Camera.Position, Settings.CameraClosePlane, Settings.CameraFarPlane, Settings.WaterReflectionPlaneDirection, Settings.WaterReflectionResolutionX, Settings.WaterReflectionResolutionY, SceneRenderTarget.RenderType.SingleColor);
            RefractionRenderTarget = new SceneRenderTarget("RefractionMap", RefractionNode, Render.Graphics, Render.Camera.Position, Settings.CameraClosePlane, Settings.CameraFarPlane, Settings.WaterRefractionPlaneDirection, Settings.WaterReflectionResolutionX, Settings.WaterReflectionResolutionY, SceneRenderTarget.RenderType.SingleColor);
            DepthMapRenderTarget   = new SceneRenderTarget("DepthMap", RefractionNode, Render.Graphics, Render.Camera.Position, Settings.CameraClosePlane, Settings.CameraFarPlane, Settings.WaterRefractionPlaneDirection, Settings.WaterReflectionResolutionX, Settings.WaterReflectionResolutionY, SceneRenderTarget.RenderType.SingleDepth);


            FromBelowDepthTarget = new SceneRenderTarget("DepthMap", RefractionNode, Render.Graphics, new Vector3(), Settings.FromBelowClosePlane, Settings.FromBelowFarPlane, 0,
                                                         Settings.FromBelowResolutionX, Settings.FromBelowResolutionY, SceneRenderTarget.RenderType.SingleDepth, Settings.ChunkSize, Settings.ChunkSize);


            ReflectionRenderTarget.ClipOffset = Settings.ClipOffset;
            RefractionRenderTarget.ClipOffset = Settings.ClipOffset;
            DepthMapRenderTarget.ClipOffset   = Settings.ClipOffset;

            FromBelowDepthTarget.DebugTextureName = "SceneColorDebug";
            //DepthMapRenderTarget.DebugTextureName = "SceneDepthDebug";

            Render.AddRenderTarget(ReflectionRenderTarget);
            Render.AddRenderTarget(RefractionRenderTarget);
            Render.AddRenderTarget(DepthMapRenderTarget);
            Render.AddRenderTarget(FromBelowDepthTarget);

            ReflectionRenderTarget.AttachRange(ReflectionUpdateList);
            RefractionRenderTarget.AttachRange(RefractionUpdateList);
            DepthMapRenderTarget.AttachRange(DepthUpdateList);
        }