Exemple #1
0
        private Mat AlphaBlending(Mat data, int posX, int posY)
        {
            var dataWidth      = data.Size().Width;
            var dataHeight     = data.Size().Height;
            var dataToBeFilled = new Scalar(0, 0, 0, 0);

            Mat newMat;

            newMat = data.CopyMakeBorder(
                top: posY,
                bottom: SceneSize.Height - dataHeight - posY,
                left: posX,
                right: SceneSize.Width - dataWidth - posX,
                borderType: BorderTypes.Constant,
                value: dataToBeFilled
                );

            if (PreLoadedMats != null)
            {
                PreLoadedMats.MoveNext();

                var baseimg  = PreLoadedMats.Current;
                var newalpha = newMat.Split()[3];

                Mat background = new Mat(SceneSize, MatType.CV_8UC3, 0);
                Mat foreground = new Mat(SceneSize, MatType.CV_8UC3, 0);
                Mat alpha      = new Mat(SceneSize, MatType.CV_8UC3, 0);

                baseimg = baseimg.CvtColor(ColorConversionCodes.RGBA2RGB);
                baseimg.ConvertTo(background, MatType.CV_8UC3);

                newMat = newMat.CvtColor(ColorConversionCodes.RGBA2RGB);
                newMat.ConvertTo(foreground, MatType.CV_8UC3);

                newalpha = newalpha.CvtColor(ColorConversionCodes.RGBA2RGB);
                newalpha.ConvertTo(alpha, MatType.CV_8UC3);

                Cv2.Multiply(alpha, foreground, foreground);
                Cv2.Multiply(1 - (alpha / 255.0), background, background);
                Cv2.Add(background, foreground, newMat);

                background.Dispose();
                foreground.Dispose();
                alpha.Dispose();
                BaseMat.Dispose();
                newalpha.Dispose();
            }
            else
            {
                newMat.CopyTo(BaseMat, newMat.Split()[3]);
            }

            return(newMat);
        }
    private void CheckForMaterials()
    {
        numColors = (NumColors)EditorGUILayout.EnumPopup("Number of Colors", numColors);
        if (numColors == NumColors.TwoColors)
        {
            EditorGUILayout.BeginHorizontal();
            baseMatSel = (BaseMat)EditorGUILayout.EnumPopup("Base Material", baseMatSel);
            baseMatCol = EditorGUILayout.ColorField(baseMatCol);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            borderMatSel = (BorderMat)EditorGUILayout.EnumPopup("Border Material", borderMatSel);
            borderMatCol = EditorGUILayout.ColorField(borderMatCol);
            EditorGUILayout.EndHorizontal();

            if (!baseMat)
            {
                baseMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(baseMat, "Assets/newBaseMaterial.mat");
            }
            if (!borderMat)
            {
                borderMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(borderMat, "Assets/newBorderMaterial.mat");
            }

            if (baseMatSel == BaseMat.Wood)
            {
                if (baseMat.mainTexture != tcmPrefabs.baseWood)
                {
                    baseMat.mainTexture = tcmPrefabs.baseWood;
                }
            }
            else
            {
                if (baseMat.mainTexture != tcmPrefabs.baseMetal)
                {
                    baseMat.mainTexture = tcmPrefabs.baseMetal;
                }
            }
            if (borderMatSel == BorderMat.Wood)
            {
                if (borderMat.mainTexture != tcmPrefabs.borderWood)
                {
                    borderMat.mainTexture = tcmPrefabs.borderWood;
                }
            }
            else
            {
                if (borderMat.mainTexture != tcmPrefabs.borderMetal)
                {
                    borderMat.mainTexture = tcmPrefabs.borderMetal;
                }
            }
            AddMaterials(baseMat, borderMat, baseMat, borderMat, baseMatCol, borderMatCol, baseMatCol, borderMatCol);
        }
        else
        {
            EditorGUILayout.BeginHorizontal();
            topBaseMatSel = (TopBaseMat)EditorGUILayout.EnumPopup("Top Base Material", topBaseMatSel);
            topBaseMatCol = EditorGUILayout.ColorField(topBaseMatCol);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            topBorderMatSel = (TopBorderMat)EditorGUILayout.EnumPopup("Top Border Material", topBorderMatSel);
            topBorderMatCol = EditorGUILayout.ColorField(topBorderMatCol);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            bottomBaseMatSel = (BottomBaseMat)EditorGUILayout.EnumPopup("Bottom Base Material", bottomBaseMatSel);
            bottomBaseMatCol = EditorGUILayout.ColorField(bottomBaseMatCol);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            bottomBorderMatSel = (BottomBorderMat)EditorGUILayout.EnumPopup("Bottom Border Material", bottomBorderMatSel);
            bottomBorderMatCol = EditorGUILayout.ColorField(bottomBorderMatCol);
            EditorGUILayout.EndHorizontal();

            if (!topBaseMat)
            {
                topBaseMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(topBaseMat, "Assets/newTopBaseMaterial.mat");
            }
            if (!topBorderMat)
            {
                topBorderMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(topBorderMat, "Assets/newTopBorderMaterial.mat");
            }
            if (!bottomBaseMat)
            {
                bottomBaseMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(bottomBaseMat, "Assets/newBottomBaseMaterial.mat");
            }
            if (!bottomBorderMat)
            {
                bottomBorderMat = new Material(Shader.Find("Diffuse"));
                AssetDatabase.CreateAsset(bottomBorderMat, "Assets/newBottomBorderMaterial.mat");
            }

            if (topBaseMatSel == TopBaseMat.Wood)
            {
                if (topBaseMat.mainTexture != tcmPrefabs.baseWood)
                {
                    topBaseMat.mainTexture = tcmPrefabs.baseWood;
                }
            }
            else
            {
                if (topBaseMat.mainTexture != tcmPrefabs.baseMetal)
                {
                    topBaseMat.mainTexture = tcmPrefabs.baseMetal;
                }
            }

            if (topBorderMatSel == TopBorderMat.Wood)
            {
                if (topBorderMat.mainTexture != tcmPrefabs.borderWood)
                {
                    topBorderMat.mainTexture = tcmPrefabs.borderWood;
                }
            }
            else
            {
                if (topBorderMat.mainTexture != tcmPrefabs.borderMetal)
                {
                    topBorderMat.mainTexture = tcmPrefabs.borderMetal;
                }
            }



            if (bottomBaseMatSel == BottomBaseMat.Wood)
            {
                if (bottomBaseMat.mainTexture != tcmPrefabs.baseWood)
                {
                    bottomBaseMat.mainTexture = tcmPrefabs.baseWood;
                }
            }
            else
            {
                if (bottomBaseMat.mainTexture != tcmPrefabs.baseMetal)
                {
                    bottomBaseMat.mainTexture = tcmPrefabs.baseMetal;
                }
            }

            if (bottomBorderMatSel == BottomBorderMat.Wood)
            {
                if (bottomBorderMat.mainTexture != tcmPrefabs.borderWood)
                {
                    bottomBorderMat.mainTexture = tcmPrefabs.borderWood;
                }
            }
            else
            {
                if (bottomBorderMat.mainTexture != tcmPrefabs.borderMetal)
                {
                    bottomBorderMat.mainTexture = tcmPrefabs.borderMetal;
                }
            }
            AddMaterials(topBaseMat, topBorderMat, bottomBaseMat, bottomBorderMat, topBaseMatCol, topBorderMatCol, bottomBaseMatCol, bottomBorderMatCol);
        }
    }