示例#1
0
        void GenerateVegetationColorMask(VegetationSystemPro vegetationSystemPro)
        {
            _path = EditorUtility.SaveFilePanelInProject("Save mask background", "", "png",
                                                         "Please enter a file name to save the mask background to");

            if (_path.Length != 0)
            {
                VegetationColorMaskCreator colorMaskCreator = (VegetationColorMaskCreator)target;

                //Terrain selectedTerrain = _vegetationSystem.currentTerrain;
                //if (selectedTerrain == null) return;

                _cameraObject = new GameObject {
                    name = "Mask Background camera"
                };

                _textureResolution = colorMaskCreator.GetVegetationColorMaskQualityPixelResolution(colorMaskCreator
                                                                                                   .VegetationColorMaskQuality);

                _rt =
                    new RenderTexture(_textureResolution, _textureResolution, 24, RenderTextureFormat.ARGB32,
                                      RenderTextureReadWrite.Linear)
                {
                    wrapMode         = TextureWrapMode.Clamp,
                    filterMode       = FilterMode.Trilinear,
                    autoGenerateMips = false
                };

                _backgroundCamera = _cameraObject.AddComponent <Camera>();
                _backgroundCamera.targetTexture = _rt;

                _backgroundCamera.clearFlags       = CameraClearFlags.Color;
                _backgroundCamera.backgroundColor  = colorMaskCreator.BackgroundColor;
                _backgroundCamera.orthographic     = true;
                _backgroundCamera.orthographicSize = colorMaskCreator.AreaRect.size.x / 2f;
                _backgroundCamera.farClipPlane     = 20000;
                _backgroundCamera.cullingMask      = 1 << colorMaskCreator.InvisibleLayer;

                _cameraObject.transform.position = new Vector3(colorMaskCreator.AreaRect.position.x, 0,
                                                               colorMaskCreator.AreaRect.position.y) +
                                                   new Vector3(colorMaskCreator.AreaRect.size.x / 2f, 1000,
                                                               colorMaskCreator.AreaRect.size.y / 2f);
                _cameraObject.transform.rotation = Quaternion.Euler(90, 0, 0);

                _backgroundCamera.Render();
                Graphics.SetRenderTarget(_rt);
                GL.Viewport(new Rect(0, 0, _rt.width, _rt.height));
                GL.Clear(true, true, new Color(0, 0, 0, 0), 1f);

                GL.PushMatrix();
                GL.LoadProjectionMatrix(_backgroundCamera.projectionMatrix);
                GL.modelview = _backgroundCamera.worldToCameraMatrix;
                GL.PushMatrix();

                List <VegetationCell> selectedCells = new List <VegetationCell>();
                vegetationSystemPro.VegetationCellQuadTree.Query(colorMaskCreator.AreaRect, selectedCells);
                RenderVegetation(selectedCells, vegetationSystemPro, colorMaskCreator);

                GL.PopMatrix();
                GL.PopMatrix();
                PostProcessMask();
            }
        }