Esempio n. 1
0
        /// <summary>
        /// Converts the resolution enum to a number.
        /// The number is how many pixels make up one grid in the mesh.
        /// </summary>
        int ResolutionToNumber(MESH_RESOLUTION resolution)
        {
            switch (resolution)
            {
            case MESH_RESOLUTION.EXTREME:
                return(1);

            case MESH_RESOLUTION.ULTRA:
                return(2);

            case MESH_RESOLUTION.HIGH:
                return(4);

            case MESH_RESOLUTION.MEDIUM:
                return(8);

            case MESH_RESOLUTION.LOW:
                return(16);

            default:
                return(16);
            }
        }
Esempio n. 2
0
        void pegaDados()
        {
            int valor;

            valor = int.Parse(dados[7]);

            if (valor == 0)
            {
                resolution = MESH_RESOLUTION.LOW;
            }
            if (valor == 1)
            {
                resolution = MESH_RESOLUTION.MEDIUM;
            }
            if (valor == 2)
            {
                resolution = MESH_RESOLUTION.HIGH;
            }
            if (valor == 3)
            {
                resolution = MESH_RESOLUTION.ULTRA;
            }
            if (valor == 4)
            {
                resolution = MESH_RESOLUTION.EXTREME;
            }

            if (dados [8] == "True")
            {
                receiveShadows = true;
            }
            else
            {
                receiveShadows = false;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Creates the grid for this resolution setting.
        /// </summary>
        void CreateGrid(MESH_RESOLUTION meshRes)
        {
            if (!m_grids.ContainsKey(meshRes))
            {
                m_grids.Add(meshRes, new Grid());
            }

            Grid grid = m_grids[meshRes];

            int screenWidth  = ScreenWidth();
            int screenHeight = ScreenHeight();
            int resolution   = ResolutionToNumber(meshRes);
            int groups       = ChooseGroupSize(resolution, gridGroups, screenWidth, screenHeight);

            if (!ForceRecreate && grid.screenWidth == screenWidth && grid.screenHeight == screenHeight && grid.groups == groups)
            {
                //Have already created a grid for this
                //resolution at the current screen size
                return;
            }
            else
            {
                //Grid has either not been created or the screen has been resized.
                //Clear grid and create.
                ClearGrid(grid);

                grid.screenWidth  = screenWidth;
                grid.screenHeight = screenHeight;
                grid.resolution   = resolution;
                grid.groups       = groups;
            }

            ForceRecreate = false;

            //Create the quads that will make up the grid.
            //The grid covers the screen and is split up
            //into smaller quads. Each quads has a mesh.
            IList <Mesh> meshs = CreateScreenQuads(resolution, groups, screenWidth, screenHeight);

            //For each mesh make a gameobject for the top side and under side.
            foreach (Mesh mesh in meshs)
            {
                if (oceanTopSideMat != null)
                {
                    GameObject top = new GameObject("Ceto TopSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = top.AddComponent <MeshFilter>();
                    MeshRenderer renderer = top.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = top.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.sharedMaterial       = oceanTopSideMat;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    top.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    top.hideFlags = HideFlags.HideAndDontSave;

                    //Must render reflection first or it will cause so artefacts on ocean
                    //for some reason. Its related to the overlays but exact cause is unknown.
                    willRender.AddAction(m_ocean.RenderReflection);

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.top.Add(top);
                    grid.topRenderer.Add(renderer);
                    grid.topFilters.Add(filter);
                }

                if (oceanUnderSideMat)
                {
                    GameObject under = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = under.AddComponent <MeshFilter>();
                    MeshRenderer renderer = under.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = under.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    renderer.sharedMaterial       = oceanUnderSideMat;
                    under.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    under.hideFlags = HideFlags.HideAndDontSave;

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.under.Add(under);
                    grid.underRenderer.Add(renderer);
                    grid.underFilters.Add(filter);
                }

                Destroy(mesh);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Creates the grid for this resolution setting.
        /// </summary>
        void CreateGrid(MESH_RESOLUTION meshRes)
        {
            Grid grid = null;

            if (!m_grids.TryGetValue((int)meshRes, out grid)) //OYM:  先获取一下网格,如果能获取到就不创建新的了
                                                              //OYM:  注意一下,这里的int转换出来是1234,但是下面那个取出来是1248.
            {
                grid = new Grid();
                m_grids.Add((int)meshRes, grid);
            }
            //OYM:  获取屏幕大小
            int screenWidth  = ScreenWidth();
            int screenHeight = ScreenHeight();
            int resolution   = ResolutionToNumber(meshRes);                                        //OYM:  对就是这里
            int groups       = ChooseGroupSize(resolution, gridGroups, screenWidth, screenHeight); //OYM:  选择分割的合适大小

            if (grid.screenWidth == screenWidth && grid.screenHeight == screenHeight && grid.groups == groups)
            {
                //OYM:  已经在当前分辨率下创建了一个网格
                //Have already created a grid for this
                //resolution at the current screen size
                return;
            }
            else
            {
                //Grid has either not been created or the screen has been resized.
                //Clear grid and create.
                ClearGrid(grid);//OYM:  创建一个网格

                grid.screenWidth  = screenWidth;
                grid.screenHeight = screenHeight;
                grid.resolution   = resolution; //OYM:  解析度
                grid.groups       = groups;     //OYM:  数目,-1代表只有一个
            }

            //Create the quads that will make up the grid.
            //The grid covers the screen and is split up
            //into smaller quads. Each quads has a mesh.
            IList <Mesh> meshs = CreateScreenQuads(resolution, groups, screenWidth, screenHeight);

            //For each mesh make a gameobject for the top side and under side.
            foreach (Mesh mesh in meshs)
            {
                if (oceanTopSideMat != null)
                {
                    //OYM:  创建海洋实体
                    GameObject top = new GameObject("Ceto TopSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = top.AddComponent <MeshFilter>();
                    MeshRenderer renderer = top.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = top.AddComponent <NotifyOnWillRender>(); //OYM:  本质上是一个component.实际上还不清楚

                    filter.sharedMesh             = mesh;                                    //OYM:  设置mesh
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;                   //OYM:  不投射阴影
                    renderer.receiveShadows       = receiveShadows;                          //OYM:   是否产生阴影
                    renderer.sharedMaterial       = oceanTopSideMat;                         //OYM:  设置mat
                    renderer.reflectionProbeUsage = reflectionProbes;                        //OYM:  设置反射球(所以还是用unity的反射吗)
                    top.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);                    //OYM:  设置层级
                    //top.hideFlags = HideFlags.HideAndDontSave; //OYM:  难怪选不中,原来在这里被藏起来了

                    //Must render reflection first or it will cause so artefacts on ocean
                    //for some reason. Its related to the overlays but exact cause is unknown.
                    willRender.AddAction(m_ocean.RenderReflection); //OYM:  需要先渲染反射,否则海洋可能看起来像是人工制品一样
                                                                    //OYM:  这底下的方法就难啃了

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.top.Add(top);
                    grid.topRenderer.Add(renderer);
                    grid.topFilters.Add(filter);
                }

                if (oceanUnderSideMat)
                {
                    GameObject under = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);

                    MeshFilter   filter   = under.AddComponent <MeshFilter>();
                    MeshRenderer renderer = under.AddComponent <MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = under.AddComponent <NotifyOnWillRender>();

                    filter.sharedMesh             = mesh;
                    renderer.shadowCastingMode    = ShadowCastingMode.Off;
                    renderer.receiveShadows       = receiveShadows;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    renderer.sharedMaterial       = oceanUnderSideMat;
                    under.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    under.hideFlags = HideFlags.HideAndDontSave;

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.under.Add(under);
                    grid.underRenderer.Add(renderer);
                    grid.underFilters.Add(filter);
                }

                Destroy(mesh);
            }
        }
Esempio n. 5
0
        private void CreateGrid(MESH_RESOLUTION meshRes)
        {
            ProjectedGrid.Grid grid = null;
            if (!this.m_grids.TryGetValue(meshRes, out grid))
            {
                grid = new ProjectedGrid.Grid();
                this.m_grids.Add(meshRes, grid);
            }
            int num  = this.ScreenWidth();
            int num2 = this.ScreenHeight();
            int num3 = this.ResolutionToNumber(meshRes);
            int num4 = this.ChooseGroupSize(num3, this.gridGroups, num, num2);

            if (!base.ForceRecreate && grid.screenWidth == num && grid.screenHeight == num2 && grid.groups == num4)
            {
                return;
            }
            this.ClearGrid(grid);
            grid.screenWidth   = num;
            grid.screenHeight  = num2;
            grid.resolution    = num3;
            grid.groups        = num4;
            base.ForceRecreate = false;
            IList <Mesh> list = this.CreateScreenQuads(num3, num4, num, num2);

            foreach (Mesh mesh in list)
            {
                if (this.oceanTopSideMat != null)
                {
                    GameObject         gameObject         = new GameObject("Ceto TopSide Grid LOD: " + meshRes);
                    MeshFilter         meshFilter         = gameObject.AddComponent <MeshFilter>();
                    MeshRenderer       meshRenderer       = gameObject.AddComponent <MeshRenderer>();
                    NotifyOnWillRender notifyOnWillRender = gameObject.AddComponent <NotifyOnWillRender>();
                    meshFilter.sharedMesh             = mesh;
                    meshRenderer.shadowCastingMode    = ShadowCastingMode.Off;
                    meshRenderer.receiveShadows       = this.receiveShadows;
                    meshRenderer.sharedMaterial       = this.oceanTopSideMat;
                    meshRenderer.reflectionProbeUsage = this.reflectionProbes;
                    gameObject.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    gameObject.hideFlags = HideFlags.HideAndDontSave;
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderReflection));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.ApplyProjection));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderWaveOverlays));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanMask));
                    notifyOnWillRender.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanDepth));
                    grid.top.Add(gameObject);
                    grid.topRenderer.Add(meshRenderer);
                    grid.topFilters.Add(meshFilter);
                }
                if (this.oceanUnderSideMat)
                {
                    GameObject         gameObject2         = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);
                    MeshFilter         meshFilter2         = gameObject2.AddComponent <MeshFilter>();
                    MeshRenderer       meshRenderer2       = gameObject2.AddComponent <MeshRenderer>();
                    NotifyOnWillRender notifyOnWillRender2 = gameObject2.AddComponent <NotifyOnWillRender>();
                    meshFilter2.sharedMesh             = mesh;
                    meshRenderer2.shadowCastingMode    = ShadowCastingMode.Off;
                    meshRenderer2.receiveShadows       = this.receiveShadows;
                    meshRenderer2.reflectionProbeUsage = this.reflectionProbes;
                    meshRenderer2.sharedMaterial       = this.oceanUnderSideMat;
                    gameObject2.layer     = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    gameObject2.hideFlags = HideFlags.HideAndDontSave;
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.ApplyProjection));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderWaveOverlays));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanMask));
                    notifyOnWillRender2.AddAction(new Action <GameObject>(this.m_ocean.RenderOceanDepth));
                    grid.under.Add(gameObject2);
                    grid.underRenderer.Add(meshRenderer2);
                    grid.underFilters.Add(meshFilter2);
                }
                UnityEngine.Object.Destroy(mesh);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Converts the resolution enum to a number.
        /// The number is how many pixels make up one grid in the mesh.
        /// </summary>
        int ResolutionToNumber(MESH_RESOLUTION resolution)
        {
            switch (resolution)
            {

                case MESH_RESOLUTION.EXTREME:
                    return 1;

                case MESH_RESOLUTION.ULTRA:
                    return 2;

                case MESH_RESOLUTION.HIGH:
                    return 4;

                case MESH_RESOLUTION.MEDIUM:
                    return 8;

                case MESH_RESOLUTION.LOW:
                    return 16;

                default:
                    return 16;
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Creates the grid for this resolution setting.
        /// </summary>
        void CreateGrid(MESH_RESOLUTION meshRes)
        {
            if (!m_grids.ContainsKey(meshRes))
            {
                m_grids.Add(meshRes, new Grid());
            }

            Grid grid = m_grids[meshRes];

            int screenWidth = ScreenWidth();
            int screenHeight = ScreenHeight();
            int resolution = ResolutionToNumber(meshRes);
            int groups = ChooseGroupSize(resolution, gridGroups, screenWidth, screenHeight);

            if(!ForceRecreate && grid.screenWidth == screenWidth && grid.screenHeight == screenHeight && grid.groups == groups)
            {
                //Have already created a grid for this
                //resolution at the current screen size
                return;
            }
            else
            {

                //Grid has either not been created or the screen has been resized.
                //Clear grid and create.
                ClearGrid(grid);

                grid.screenWidth = screenWidth;
                grid.screenHeight = screenHeight;
                grid.resolution = resolution;
                grid.groups = groups;
            }

            ForceRecreate = false;

            //Create the quads that will make up the grid.
            //The grid covers the screen and is split up
            //into smaller quads. Each quads has a mesh.
            IList<Mesh> meshs = CreateScreenQuads(resolution, groups, screenWidth, screenHeight);

            //For each mesh make a gameobject for the top side and under side.
            foreach (Mesh mesh in meshs)
            {

                if(oceanTopSideMat != null)
                {

                    GameObject top = new GameObject("Ceto TopSide Grid LOD: " + meshRes);

                    MeshFilter filter = top.AddComponent<MeshFilter>();
                    MeshRenderer renderer = top.AddComponent<MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = top.AddComponent<NotifyOnWillRender>();

                    filter.sharedMesh = mesh;
                    renderer.shadowCastingMode = ShadowCastingMode.Off;
                    renderer.receiveShadows = receiveShadows;
                    renderer.sharedMaterial = oceanTopSideMat;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    top.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    top.hideFlags = HideFlags.HideAndDontSave;

                    //Must render reflection first or it will cause so artefacts on ocean
                    //for some reason. Its related to the overlays but exact cause is unknown.
                    willRender.AddAction(m_ocean.RenderReflection);

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.top.Add(top);
                    grid.topRenderer.Add(renderer);
                    grid.topFilters.Add(filter);
                }

                if(oceanUnderSideMat)
                {

                    GameObject under = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);

                    MeshFilter filter = under.AddComponent<MeshFilter>();
                    MeshRenderer renderer = under.AddComponent<MeshRenderer>();

                    //The notify script will call the added functions when OnWillRender is called.
                    NotifyOnWillRender willRender = under.AddComponent<NotifyOnWillRender>();

                    filter.sharedMesh = mesh;
                    renderer.shadowCastingMode = ShadowCastingMode.Off;
                    renderer.receiveShadows = receiveShadows;
                    renderer.reflectionProbeUsage = reflectionProbes;
                    renderer.sharedMaterial = oceanUnderSideMat;
                    under.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
                    under.hideFlags = HideFlags.HideAndDontSave;

                    willRender.AddAction(ApplyProjection);
                    willRender.AddAction(m_ocean.RenderWaveOverlays);
                    willRender.AddAction(m_ocean.RenderOceanMask);
                    willRender.AddAction(m_ocean.RenderOceanDepth);

                    grid.under.Add(under);
                    grid.underRenderer.Add(renderer);
                    grid.underFilters.Add(filter);
                }

                Destroy(mesh);

            }
        }
Esempio n. 8
0
 private void CreateGrid(MESH_RESOLUTION meshRes)
 {
     ProjectedGrid.Grid grid = null;
     if (!this.m_grids.TryGetValue(meshRes, out grid))
     {
         grid = new ProjectedGrid.Grid();
         this.m_grids.Add(meshRes, grid);
     }
     int num = this.ScreenWidth();
     int num2 = this.ScreenHeight();
     int num3 = this.ResolutionToNumber(meshRes);
     int num4 = this.ChooseGroupSize(num3, this.gridGroups, num, num2);
     if (!base.ForceRecreate && grid.screenWidth == num && grid.screenHeight == num2 && grid.groups == num4)
     {
         return;
     }
     this.ClearGrid(grid);
     grid.screenWidth = num;
     grid.screenHeight = num2;
     grid.resolution = num3;
     grid.groups = num4;
     base.ForceRecreate = false;
     IList<Mesh> list = this.CreateScreenQuads(num3, num4, num, num2);
     foreach (Mesh current in list)
     {
         if (this.oceanTopSideMat != null)
         {
             GameObject gameObject = new GameObject("Ceto TopSide Grid LOD: " + meshRes);
             MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();
             MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
             NotifyOnWillRender notifyOnWillRender = gameObject.AddComponent<NotifyOnWillRender>();
             meshFilter.sharedMesh = current;
             meshRenderer.shadowCastingMode = ShadowCastingMode.Off;
             meshRenderer.receiveShadows = this.receiveShadows;
             meshRenderer.sharedMaterial = this.oceanTopSideMat;
             meshRenderer.reflectionProbeUsage = this.reflectionProbes;
             gameObject.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
             gameObject.hideFlags = HideFlags.HideAndDontSave;
             notifyOnWillRender.AddAction(new Action<GameObject>(this.m_ocean.RenderReflection));
             notifyOnWillRender.AddAction(new Action<GameObject>(this.ApplyProjection));
             notifyOnWillRender.AddAction(new Action<GameObject>(this.m_ocean.RenderWaveOverlays));
             notifyOnWillRender.AddAction(new Action<GameObject>(this.m_ocean.RenderOceanMask));
             notifyOnWillRender.AddAction(new Action<GameObject>(this.m_ocean.RenderOceanDepth));
             grid.top.Add(gameObject);
             grid.topRenderer.Add(meshRenderer);
             grid.topFilters.Add(meshFilter);
         }
         if (this.oceanUnderSideMat)
         {
             GameObject gameObject2 = new GameObject("Ceto UnderSide Grid LOD: " + meshRes);
             MeshFilter meshFilter2 = gameObject2.AddComponent<MeshFilter>();
             MeshRenderer meshRenderer2 = gameObject2.AddComponent<MeshRenderer>();
             NotifyOnWillRender notifyOnWillRender2 = gameObject2.AddComponent<NotifyOnWillRender>();
             meshFilter2.sharedMesh = current;
             meshRenderer2.shadowCastingMode = ShadowCastingMode.Off;
             meshRenderer2.receiveShadows = this.receiveShadows;
             meshRenderer2.reflectionProbeUsage = this.reflectionProbes;
             meshRenderer2.sharedMaterial = this.oceanUnderSideMat;
             gameObject2.layer = LayerMask.NameToLayer(Ocean.OCEAN_LAYER);
             gameObject2.hideFlags = HideFlags.HideAndDontSave;
             notifyOnWillRender2.AddAction(new Action<GameObject>(this.ApplyProjection));
             notifyOnWillRender2.AddAction(new Action<GameObject>(this.m_ocean.RenderWaveOverlays));
             notifyOnWillRender2.AddAction(new Action<GameObject>(this.m_ocean.RenderOceanMask));
             notifyOnWillRender2.AddAction(new Action<GameObject>(this.m_ocean.RenderOceanDepth));
             grid.under.Add(gameObject2);
             grid.underRenderer.Add(meshRenderer2);
             grid.underFilters.Add(meshFilter2);
         }
         UnityEngine.Object.Destroy(current);
     }
 }