Beispiel #1
0
        private void SetMarker()
        {
            for (int i = 0; i < idsAruco.cols(); i++)
            {
                int idMarker = (int)idsAruco.get(0, i)[0];
                Debug.Log(idMarker);

                if (markerSettingsMarkerActual != null && markerSettingsMarkerActual.getId() == idMarker)
                {
                    ShowGameObjectMarker();
                }
                else
                {
                    markerSettingsMarkerActual = null;

                    foreach (MarkerSettings markerSettings in markerSettingsList)
                    {
                        if (idMarker != -1 && idMarker == markerSettings.getId())
                        {
                            markerSettingsMarkerActual = markerSettings;
                            ShowGameObjectMarker();
                        }
                    }
                }
            }
        }
Beispiel #2
0
        // Use this for initialization
        void Start()
        {
            GameObject cameraAR = GameObject.Find("ARCamera");

            ARCamera = cameraAR.GetComponent <Camera>();
            markerSettingsMarkerLessActual = null;
            markerSettingsMarkerActual     = null;

            patternTrackingInfo = new PatternTrackingInfo();
            markerSettingsList  = markerList.transform.GetComponentsInChildren <MarkerSettings>();

            if (markerSettingsList.Length == 0)
            {
                existeObjetoDetectar = false;
            }

            webCamTextureToMatHelper = gameObject.GetComponent <WebCamTextureToMatHelper>();
#if UNITY_ANDROID && !UNITY_EDITOR
            // Avoids the front camera low light issue that occurs in only some Android devices (e.g. Google Pixel, Pixel2).
            webCamTextureToMatHelper.avoidAndroidFrontCameraLowLightIssue = true;
#endif
            webCamTextureToMatHelper.Initialize();

            dictionaryAruco = Aruco.getPredefinedDictionary(PropertiesModel.DictionaryId);
            cornersAruco    = new List <Mat>();
            idsAruco        = new Mat();
        }
Beispiel #3
0
        void CreateComponent(InformationObject informationObject, PatternDetector patternDetector)
        {
            GameObject ARObjects = new GameObject();

            ARObjects.name = "ARObjects";
            ARObjects.SetActive(false);

            GameObject OBJMarkerSettings = new GameObject();

            OBJMarkerSettings.name = "MarkerSettings";

            MarkerDesign markerDesign = new MarkerDesign();

            markerDesign.id = informationObject.IdMarker;

            MarkerSettings markerSettings = OBJMarkerSettings.AddComponent <MarkerSettings>();

            markerSettings.PatternDetector = patternDetector;
            markerSettings.markerDesign    = markerDesign;
            markerSettings.ARGameObject    = ARObjects;

            GameObject objectAR      = ImportResources.GetGameObject(informationObject.Name);
            GameObject objectCreated = Instantiate(objectAR);

            objectCreated.AddComponent <RectTransform>();
            objectCreated.transform.position = Vector3.zero;
            objectCreated.transform.rotation = Quaternion.identity;
            objectCreated.layer = 8;

            objectCreated.transform.SetParent(ARObjects.transform);
            ARObjects.transform.SetParent(OBJMarkerSettings.transform);
            OBJMarkerSettings.transform.SetParent(markerList.transform);
        }
Beispiel #4
0
 public Marker(object settings) : base(settings)
 {
     _settings = Settings as MarkerSettings;
     if (_settings == null)
     {
         throw new NotImplementedException();
     }
 }
Beispiel #5
0
        public IconDrawer(Bitmap icon, MarkerSettings colors)
        {
            ColorBrush = new SolidBrush(colors.Color);
            if (colors.ExtraColor != Color.Transparent)
            {
                ExtraColorBrush = new SolidBrush(colors.ExtraColor);
            }

            Bitmap = icon;
        }
Beispiel #6
0
        public IconDrawer(Bitmap icon, MarkerSettings colors)
        {
            ColorBrush = new SolidBrush(colors.Color);
            if (colors.ExtraColor != Color.Transparent)
            {
                ExtraColorBrush = new SolidBrush(colors.ExtraColor);
            }

            Bitmap = icon;
        }
Beispiel #7
0
        private void SetMarkerLess()
        {
            if (markerSettingsMarkerLessActual != null && markerSettingsMarkerLessActual.GetPatternDetector().findPattern(rgbMat, patternTrackingInfo))
            {
                ShowGameObjectMarkerLess();
            }
            else
            {
                markerSettingsMarkerLessActual = null;

                foreach (MarkerSettings markerSettings in markerSettingsList)
                {
                    PatternDetector patternDetector = markerSettings.GetPatternDetector();

                    if (patternDetector != null && patternDetector.findPattern(rgbMat, patternTrackingInfo))
                    {
                        markerSettingsMarkerLessActual = markerSettings;
                        ShowGameObjectMarkerLess();
                    }
                }
            }
        }
Beispiel #8
0
 private void UpdateMarker(MarkerSettings settings)
 {
     if (_tribe != null)
     {
         _map.MarkerManager.UpdateMarker(_map, _tribe, settings);
     }
     else
     {
         _map.MarkerManager.UpdateMarker(_map, _player, settings);
     }
     _mainCommand.Image = GetMainCommandImage(GetMarker());
 }
        public void SetMarker(MarkerSettings settings)
        {
            _settings = settings;
            _player = null;
            _tribe = null;

            SetControlProperties(settings);
        }
Beispiel #10
0
        public void LoadSettings()
        {
            curSettingsName = "Default";
            Int32        settingsNodeCount;
            UserSettings us;
            Int32        settingsVer;
            XmlNode      baseNode;
            XmlNodeList  settingsNodes;
            XmlNode      parseNode;
            XmlNodeList  parseNodeList;
            XmlDocument  xmlDoc = new XmlDocument();

            xmlDoc.Load(Global.ApplicationUserSettingsFile);

            baseNode = xmlDoc.DocumentElement;

            // There's no UserSettings element so we'll use the default settings.
            if (baseNode.Name != "UserSettings")
            {
                return;
            }

            if (baseNode.Attributes["version"] == null)
            {
                settingsVer = 0;
            }
            else
            {
                settingsVer = Int32.Parse(baseNode.Attributes["version"].Value);
            }

            switch (settingsVer)
            {
            case 0:
                break;

            case 1:
                parseNode = baseNode.SelectSingleNode("GlobalSettings");

                if (parseNode == null)
                {
                    break;
                }

                parseNodeList = parseNode.SelectNodes("item");

                foreach (XmlNode node in parseNodeList)
                {
                    parseNode = node.Attributes["name"];

                    if (parseNode == null)
                    {
                        continue;
                    }

                    switch (parseNode.Value)
                    {
                    case "UseSettings":
                        parseNode = node.Attributes["value"];

                        if (parseNode != null)
                        {
                            curSettingsName = parseNode.Value;
                        }
                        break;

                    case "HighestVersion":
                        parseNode = node.Attributes["value"];

                        if (parseNode != null)
                        {
                            this.HighestVersion = Int32.Parse(parseNode.Value);
                        }
                        break;

                    default:
                        break;
                    }
                }
                break;

            default:
                break;
            }

            if (settingsVer > 0)
            {
                settingsNodes = baseNode.SelectNodes("Settings");
            }
            else
            {
                settingsNodes = xmlDoc.SelectNodes("UserSettings");
            }

            settingsNodeCount = 0;
            foreach (XmlNode settingsNode in settingsNodes)
            {
                String settingsName;

                parseNode = settingsNode.Attributes["name"];

                if (parseNode == null)
                {
                    settingsName = "Default";
                }
                else
                {
                    settingsName = parseNode.Value;
                }

                us = null;
                if (settingsList.ContainsKey(settingsName))
                {
                    us = settingsList[settingsName];
                }
                //foreach (UserSettings testUs in this.settingsList)
                //{
                //    if (testUs.SettingsName == settingsName)
                //        us = testUs;
                //}

                if (us == null)
                {
                    us = new UserSettings();
                    SetDefaults(us);
                    us.SettingsName = settingsName;

                    this.settingsList.Add(settingsName, us);
                }

                if (us.SettingsName == curSettingsName)
                {
                    this.settings = us;
                    curSettings   = settingsNodeCount;
                }
                settingsNodeCount++;

                switch (settingsVer)
                {
                case 0:
                    #region UserSettings version 0 Loader
                    foreach (XmlNode node in settingsNode)
                    {
                        switch (node.Name)
                        {
                        case "InputWorldDirectory":
                            us.InputWorldDirectory = node.InnerXml;
                            break;

                        case "OutputPreviewDirectory":
                            us.OutputPreviewDirectory = node.InnerXml;
                            break;

                        case "IsChestFilterEnabled":
                            us.IsChestFilterEnabled = Boolean.Parse(node.InnerXml);
                            break;

                        case "IsWallsDrawable":
                            us.AreWallsDrawable = Boolean.Parse(node.InnerXml);
                            break;

                        case "OpenImageAfterDraw":
                            us.OpenImageAfterDraw = Boolean.Parse(node.InnerXml);
                            break;

                        case "ShowChestTypes":
                            us.ShowChestTypes = Boolean.Parse(node.InnerXml);
                            break;

                        case "UseCustomMarkers":
                            us.UseCustomMarkers = Boolean.Parse(node.InnerXml);
                            break;

                        case "ChestListSortType":
                            us.ChestListSortType = Int32.Parse(node.InnerXml);
                            break;

                        case "HighestVersion":
                            this.HighestVersion = Int32.Parse(node.InnerXml);
                            break;

                        case "SymbolStates":
                            parseNodeList = node.SelectNodes("item");

                            foreach (XmlNode n in parseNodeList)
                            {
                                String         Key;
                                Boolean        Value;
                                MarkerSettings mi;

                                parseNode = n.SelectSingleNode("key").SelectSingleNode("string");
                                Key       = parseNode.InnerXml;

                                parseNode = n.SelectSingleNode("value").SelectSingleNode("boolean");
                                Value     = Boolean.Parse(parseNode.InnerXml);

                                if (us.MarkerStates.ContainsKey(Key))
                                {
                                    us.MarkerStates[Key].Drawing = Value;
                                }
                                else
                                {
                                    String newKey = Global.Instance.Info.MarkerImageToName(Key);

                                    if (!us.MarkerStates.ContainsKey(newKey))
                                    {
                                        newKey = String.Empty;
                                    }

                                    if (newKey == String.Empty)
                                    {
                                        mi         = new MarkerSettings();
                                        mi.Drawing = Value;
                                        us.MarkerStates.Add(Key, mi);
                                    }
                                    else
                                    {
                                        us.MarkerStates[newKey].Drawing = Value;
                                    }
                                }
                            }
                            break;

                        case "ChestFilterItems":
                            parseNodeList = node.SelectNodes("item");

                            foreach (XmlNode n in parseNodeList)
                            {
                                String  Key;
                                Boolean Value;

                                parseNode = n.SelectSingleNode("key").SelectSingleNode("string");
                                Key       = parseNode.InnerXml;

                                parseNode = n.SelectSingleNode("value").SelectSingleNode("boolean");
                                Value     = Boolean.Parse(parseNode.InnerXml);

                                if (Value == true)
                                {
                                    us.ChestFilterItems.Add(Key);
                                }
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    #endregion
                    break;

                case 1:
                    #region UserSettings version 1 Loader
                    foreach (XmlNode node in settingsNode)
                    {
                        parseNode = node.Attributes["name"];

                        if (parseNode == null)
                        {
                            continue;
                        }

                        switch (parseNode.Value)
                        {
                        case "InputWorldDirectory":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.InputWorldDirectory = parseNode.Value;
                            }
                            break;

                        case "OutputPreviewDirectory":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.OutputPreviewDirectory = parseNode.Value;
                            }
                            break;

                        case "IsChestFilterEnabled":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.IsChestFilterEnabled = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "UseOfficialColors":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.UseOfficialColors = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "AreWiresDrawable":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.AreWiresDrawable = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "AreWallsDrawable":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.AreWallsDrawable = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "OpenImageAfterDraw":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.OpenImageAfterDraw = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "ShowChestTypes":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.ShowChestTypes = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "UseCustomMarkers":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.UseCustomMarkers = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "ChestListSortType":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.ChestListSortType = Int32.Parse(parseNode.Value);
                            }
                            break;

                        case "CropImageType":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.CropImageType = Int32.Parse(parseNode.Value);
                            }
                            break;

                        case "ShowChestItems":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.ShowChestItems = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "ShowNormalItems":
                            parseNode = node.Attributes["value"];

                            if (parseNode != null)
                            {
                                us.ShowNormalItems = Boolean.Parse(parseNode.Value);
                            }
                            break;

                        case "MarkerStates":
                            parseNodeList = node.SelectNodes("listitem");

                            foreach (XmlNode n in parseNodeList)
                            {
                                String         Name;
                                MarkerSettings mi;

                                parseNode = n.Attributes["name"];

                                if (parseNode == null)
                                {
                                    break;
                                }

                                Name = parseNode.Value;

                                if (us.MarkerStates.TryGetValue(Name, out mi) == false)
                                {
                                    mi = new MarkerSettings();
                                }

                                parseNode = n.Attributes["draw"];

                                if (parseNode != null)
                                {
                                    mi.Drawing = Boolean.Parse(parseNode.Value);
                                }

                                parseNode = n.Attributes["filter"];

                                if (parseNode != null)
                                {
                                    mi.Filtering = Boolean.Parse(parseNode.Value);
                                }

                                parseNode = n.Attributes["min"];

                                if (parseNode != null)
                                {
                                    mi.Min = Int32.Parse(parseNode.Value);
                                }

                                parseNode = n.Attributes["max"];

                                if (parseNode != null)
                                {
                                    mi.Max = Int32.Parse(parseNode.Value);
                                }

                                if (!us.MarkerStates.ContainsKey(Name))
                                {
                                    us.MarkerStates.Add(Name, mi);
                                }
                            }
                            break;

                        case "ChestFilterItems":
                            parseNode = node.Attributes["filter"];

                            if (parseNode == null)
                            {
                                continue;
                            }

                            String[] splitList = parseNode.Value.Split(';');

                            foreach (String s in splitList)
                            {
                                us.ChestFilterItems.Add(s);
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    #endregion
                    break;

                default:
                    return;
                }
            }

            parseNode = baseNode.SelectSingleNode("CustomColors");

            if (parseNode != null)
            {
                parseNode = parseNode.Attributes["list"];

                if (parseNode != null)
                {
                    String[] colorList = parseNode.Value.Split(';');
                    Color    newColor;

                    for (Int32 sPos = 0; sPos < colorList.Length; sPos += 2)
                    {
                        if (Global.TryParseColor(colorList[sPos + 1], out newColor) == false)
                        {
                            continue;
                        }

                        if (Global.Instance.Info.Colors.ContainsKey(colorList[sPos]))
                        {
                            continue;
                        }


                        Global.Instance.Info.AddCustomColor(colorList[sPos], newColor);
                    }
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// Reads a Marker from the XML node
        /// </summary>
        private static Marker ReadMarker(XmlReader r)
        {
            string name = r.GetAttribute("Name");
            bool enabled = Convert.ToBoolean(r.GetAttribute("Enabled").ToLower());
            Color color = XmlHelper.GetColor(r.GetAttribute("Color"));
            Color extraColor = XmlHelper.GetColor(r.GetAttribute("ExtraColor"));
            string view = r.GetAttribute("View");
            var settings = new MarkerSettings(name, enabled, color, extraColor, view);
            Marker marker = null;

            if (!r.IsEmptyElement)
            {
                r.ReadStartElement();
                while (r.IsStartElement("Marker"))
                {
                    string markerType = r.GetAttribute("Type");
                    string markerName = r.GetAttribute("Name");

                    if (markerType == "Player")
                    {
                        Player ply = World.Default.GetPlayer(markerName);
                        if (ply != null)
                        {
                            marker = new Marker(ply, settings);
                        }
                    }
                    else
                    {
                        Debug.Assert(markerType == "Tribe");
                        Tribe tribe = World.Default.GetTribe(markerName);
                        if (tribe != null)
                        {
                            marker = new Marker(tribe, settings);
                        }
                    }

                    r.Read();
                }
                r.ReadEndElement();
            }
            else
            {
                r.Read();
            }

            return marker ?? new Marker(settings);
        }
Beispiel #12
0
        /// <summary>
        /// Update a tribe marker and refresh the map
        /// </summary>
        public void UpdateMarker(Map map, Tribe tribe, MarkerSettings settings)
        {
            if (World.Default.You.HasTribe && tribe == World.Default.You.Tribe)
            {
                settings = MarkerSettings.ChangeName(settings, Marker.DefaultNames.YourTribe);
                YourTribeMarker = new Marker(settings);
            }
            else
            {
                _markers.RemoveAll(x => x.Tribe == tribe);
                _markers.Add(new Marker(tribe, settings));
            }

            World.Default.InvalidateMarkers();
        }
Beispiel #13
0
        /// <summary>
        /// Update a player marker and refresh the map
        /// </summary>
        public void UpdateMarker(Map map, Player player, MarkerSettings settings)
        {
            if (player == World.Default.You)
            {
                settings = MarkerSettings.ChangeName(settings, Marker.DefaultNames.You);
                YourMarker = new Marker(settings);
            }
            else
            {
                _markers.RemoveAll(x => x.Player == player);
                _markers.Add(new Marker(player, settings));
            }

            World.Default.InvalidateMarkers();
        }
Beispiel #14
0
        /// <summary>
        /// Update Enemy or Abandoned markers
        /// </summary>
        public void UpdateDefaultMarker(Map map, MarkerSettings settings)
        {
            switch (settings.Name)
            {
                case Marker.DefaultNames.Abandoned:
                    AbandonedMarker = new Marker(settings);
                    break;

                case Marker.DefaultNames.Enemy:
                    EnemyMarker = new Marker(settings);
                    break;

                case Marker.DefaultNames.You:
                    YourMarker = new Marker(settings);
                    break;

                case Marker.DefaultNames.YourTribe:
                    YourTribeMarker = new Marker(settings);
                    break;

                default:
                    Debug.Assert(false, "'You' and 'Your Tribe' markers are updated through the regular UpdateMarker methods");
                    break;
            }

            World.Default.InvalidateMarkers();
        }
        // Use this for initialization
        void Start()
        {
            gameObject.transform.localScale = new Vector3(imgTexture.width, imgTexture.height, 1);
            Debug.Log("Screen.width " + Screen.width + " Screen.height " + Screen.height + " Screen.orientation " + Screen.orientation);

            Mat imgMat = new Mat(imgTexture.height, imgTexture.width, CvType.CV_8UC4);

            Utils.texture2DToMat(imgTexture, imgMat);
            Debug.Log("imgMat dst ToString " + imgMat.ToString());


            float width  = imgMat.width();
            float height = imgMat.height();

            float imageSizeScale = 1.0f;
            float widthScale     = (float)Screen.width / width;
            float heightScale    = (float)Screen.height / height;

            if (widthScale < heightScale)
            {
                Camera.main.orthographicSize = (width * (float)Screen.height / (float)Screen.width) / 2;
                imageSizeScale = (float)Screen.height / (float)Screen.width;
            }
            else
            {
                Camera.main.orthographicSize = height / 2;
            }

            //set cameraparam
            int    max_d     = (int)Mathf.Max(width, height);
            double fx        = max_d;
            double fy        = max_d;
            double cx        = width / 2.0f;
            double cy        = height / 2.0f;
            Mat    camMatrix = new Mat(3, 3, CvType.CV_64FC1);

            camMatrix.put(0, 0, fx);
            camMatrix.put(0, 1, 0);
            camMatrix.put(0, 2, cx);
            camMatrix.put(1, 0, 0);
            camMatrix.put(1, 1, fy);
            camMatrix.put(1, 2, cy);
            camMatrix.put(2, 0, 0);
            camMatrix.put(2, 1, 0);
            camMatrix.put(2, 2, 1.0f);
            Debug.Log("camMatrix " + camMatrix.dump());

            MatOfDouble distCoeffs = new MatOfDouble(0, 0, 0, 0);

            Debug.Log("distCoeffs " + distCoeffs.dump());

            //calibration camera
            Size   imageSize      = new Size(width * imageSizeScale, height * imageSizeScale);
            double apertureWidth  = 0;
            double apertureHeight = 0;

            double[] fovx           = new double[1];
            double[] fovy           = new double[1];
            double[] focalLength    = new double[1];
            Point    principalPoint = new Point(0, 0);

            double[] aspectratio = new double[1];

            Calib3d.calibrationMatrixValues(camMatrix, imageSize, apertureWidth, apertureHeight, fovx, fovy, focalLength, principalPoint, aspectratio);

            Debug.Log("imageSize " + imageSize.ToString());
            Debug.Log("apertureWidth " + apertureWidth);
            Debug.Log("apertureHeight " + apertureHeight);
            Debug.Log("fovx " + fovx [0]);
            Debug.Log("fovy " + fovy [0]);
            Debug.Log("focalLength " + focalLength [0]);
            Debug.Log("principalPoint " + principalPoint.ToString());
            Debug.Log("aspectratio " + aspectratio [0]);


            //To convert the difference of the FOV value of the OpenCV and Unity.
            double fovXScale = (2.0 * Mathf.Atan((float)(imageSize.width / (2.0 * fx)))) / (Mathf.Atan2((float)cx, (float)fx) + Mathf.Atan2((float)(imageSize.width - cx), (float)fx));
            double fovYScale = (2.0 * Mathf.Atan((float)(imageSize.height / (2.0 * fy)))) / (Mathf.Atan2((float)cy, (float)fy) + Mathf.Atan2((float)(imageSize.height - cy), (float)fy));

            Debug.Log("fovXScale " + fovXScale);
            Debug.Log("fovYScale " + fovYScale);


            //Adjust Unity Camera FOV
            if (widthScale < heightScale)
            {
                ARCamera.fieldOfView = (float)(fovx [0] * fovXScale);
            }
            else
            {
                ARCamera.fieldOfView = (float)(fovy [0] * fovYScale);
            }


            MarkerDesign[] markerDesigns = new MarkerDesign[markerSettings.Length];
            for (int i = 0; i < markerDesigns.Length; i++)
            {
                markerDesigns [i] = markerSettings [i].markerDesign;
            }

            MarkerDetector markerDetector = new MarkerDetector(camMatrix, distCoeffs, markerDesigns);

            markerDetector.processFrame(imgMat, 1);


            foreach (MarkerSettings settings in markerSettings)
            {
                settings.setAllARGameObjectsDisable();
            }


            if (shouldMoveARCamera)
            {
                List <Marker> findMarkers = markerDetector.getFindMarkers();
                if (findMarkers.Count > 0)
                {
                    Marker marker = findMarkers [0];

                    if (markerSettings.Length > 0)
                    {
                        MarkerSettings settings = markerSettings [0];

                        if (marker.id == settings.getMarkerId())
                        {
                            Matrix4x4 transformationM = marker.transformation;
                            Debug.Log("transformationM " + transformationM.ToString());

                            Matrix4x4 invertZM = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, 1, -1));
                            Debug.Log("invertZM " + invertZM.ToString());

                            Matrix4x4 invertYM = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, -1, 1));
                            Debug.Log("invertYM " + invertYM.ToString());



                            GameObject ARGameObject = settings.getARGameObject();
                            if (ARGameObject != null)
                            {
                                Matrix4x4 ARM = ARGameObject.transform.localToWorldMatrix * invertZM * transformationM.inverse * invertYM;
                                Debug.Log("ARM " + ARM.ToString());
                                ARGameObject.SetActive(true);
                                ARUtils.SetTransformFromMatrix(ARCamera.transform, ref ARM);
                            }
                        }
                    }
                }
            }
            else
            {
                List <Marker> findMarkers = markerDetector.getFindMarkers();
                for (int i = 0; i < findMarkers.Count; i++)
                {
                    Marker marker = findMarkers [i];

                    foreach (MarkerSettings settings in markerSettings)
                    {
                        if (marker.id == settings.getMarkerId())
                        {
                            Matrix4x4 transformationM = marker.transformation;
                            Debug.Log("transformationM " + transformationM.ToString());


                            Matrix4x4 invertYM = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, -1, 1));
                            Debug.Log("invertYM " + invertYM.ToString());

                            Matrix4x4 invertZM = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, 1, -1));
                            Debug.Log("invertZM " + invertZM.ToString());

                            Matrix4x4 ARM = ARCamera.transform.localToWorldMatrix * invertYM * transformationM * invertZM;
                            Debug.Log("ARM " + ARM.ToString());

                            GameObject ARGameObject = settings.getARGameObject();
                            if (ARGameObject != null)
                            {
                                ARUtils.SetTransformFromMatrix(ARGameObject.transform, ref ARM);
                                ARGameObject.SetActive(true);
                            }
                        }
                    }
                }
            }


            Texture2D texture = new Texture2D(imgMat.cols(), imgMat.rows(), TextureFormat.RGBA32, false);

            Utils.matToTexture2D(imgMat, texture);

            gameObject.GetComponent <Renderer> ().material.mainTexture = texture;
        }
        // Update is called once per frame
        void Update()
        {
            if (webCamTextureToMatHelper.IsPlaying() && webCamTextureToMatHelper.DidUpdateThisFrame())
            {
                Mat rgbaMat = webCamTextureToMatHelper.GetMat();

                markerDetector.processFrame(rgbaMat, 1);


                foreach (MarkerSettings settings in markerSettings)
                {
                    settings.setAllARGameObjectsDisable();
                }

                if (shouldMoveARCamera)
                {
                    List <Marker> findMarkers = markerDetector.getFindMarkers();
                    if (findMarkers.Count > 0)
                    {
                        Marker marker = findMarkers[0];

                        if (markerSettings.Length > 0)
                        {
                            MarkerSettings settings = markerSettings[0];

                            if (marker.id == settings.getMarkerId())
                            {
                                Matrix4x4 transformationM = marker.transformation;

                                // right-handed coordinates system (OpenCV) to left-handed one (Unity)
                                // https://stackoverflow.com/questions/30234945/change-handedness-of-a-row-major-4x4-transformation-matrix
                                Matrix4x4 ARM = invertYM * transformationM * invertYM;

                                // Apply Y-axis and Z-axis refletion matrix. (Adjust the posture of the AR object)
                                ARM = ARM * invertYM * invertZM;

                                GameObject ARGameObject = settings.getARGameObject();
                                if (ARGameObject != null)
                                {
                                    ARM = ARGameObject.transform.localToWorldMatrix * ARM.inverse;

                                    //Debug.Log("ARM " + ARM.ToString());

                                    ARGameObject.SetActive(true);
                                    ARUtils.SetTransformFromMatrix(ARCamera.transform, ref ARM);
                                }
                            }
                        }
                    }
                }
                else
                {
                    List <Marker> findMarkers = markerDetector.getFindMarkers();
                    for (int i = 0; i < findMarkers.Count; i++)
                    {
                        Marker marker = findMarkers[i];

                        foreach (MarkerSettings settings in markerSettings)
                        {
                            if (marker.id == settings.getMarkerId())
                            {
                                Matrix4x4 transformationM = marker.transformation;

                                // right-handed coordinates system (OpenCV) to left-handed one (Unity)
                                // https://stackoverflow.com/questions/30234945/change-handedness-of-a-row-major-4x4-transformation-matrix
                                Matrix4x4 ARM = invertYM * transformationM * invertYM;

                                // Apply Y-axis and Z-axis refletion matrix. (Adjust the posture of the AR object)
                                ARM = ARM * invertYM * invertZM;

                                ARM = ARCamera.transform.localToWorldMatrix * ARM;

                                //Debug.Log("ARM " + ARM.ToString());

                                GameObject ARGameObject = settings.getARGameObject();
                                if (ARGameObject != null)
                                {
                                    ARUtils.SetTransformFromMatrix(ARGameObject.transform, ref ARM);
                                    ARGameObject.SetActive(true);
                                }
                            }
                        }
                    }
                }

                Utils.fastMatToTexture2D(rgbaMat, texture);
            }
        }
        public void SetMarker(Player player)
        {
            _settings = null;
            _player = player;
            _tribe = null;

            Marker marker = World.Default.Map.MarkerManager.GetMarker(player);
            SetControlProperties(marker.Settings);
        }
        public void SetMarker(Tribe tribe)
        {
            _settings = null;
            _player = null;
            _tribe = tribe;

            Marker marker = World.Default.Map.MarkerManager.GetMarker(tribe);
            SetControlProperties(marker.Settings);
        }
 private void UpdateMarker(MarkerSettings settings)
 {
     if (_settings != null)
     {
         if (AutoUpdateMarkers)
         {
             World.Default.Map.MarkerManager.UpdateDefaultMarker(World.Default.Map, settings);
         }
         _settings = settings;
     }
     else if (_tribe != null)
     {
         Debug.Assert(AutoUpdateMarkers);
         World.Default.Map.MarkerManager.UpdateMarker(World.Default.Map, _tribe, settings);
     }
     else
     {
         Debug.Assert(AutoUpdateMarkers);
         World.Default.Map.MarkerManager.UpdateMarker(World.Default.Map, _player, settings);
     }
 }
        /// <summary>
        /// Make the control reflect the MarkerSettings
        /// </summary>
        private void SetControlProperties(MarkerSettings settings)
        {
            _settingProperties = true;

            MarkerView.DataSource = World.Default.Views.GetBackgroundViews(AllowBarbarianViews).ToArray();
            MarkerView.SelectedValue = settings.View;

            MarkerActive.Checked = settings.Enabled;
            MarkerColor.SelectedColor = settings.Color;
            MarkerExtraColor.SelectedColor = settings.ExtraColor;

            _settingProperties = false;
        }
        // Update is called once per frame
        void Update()
        {
            if (webCamTextureToMatHelper.IsPlaying() && webCamTextureToMatHelper.DidUpdateThisFrame())
            {
                Mat rgbaMat = webCamTextureToMatHelper.GetMat();

                markerDetector.processFrame(rgbaMat, 1);


                foreach (MarkerSettings settings in markerSettings)
                {
                    settings.setAllARGameObjectsDisable();
                }

                if (shouldMoveARCamera)
                {
                    List <Marker> findMarkers = markerDetector.getFindMarkers();
                    if (findMarkers.Count > 0)
                    {
                        Marker marker = findMarkers [0];

                        if (markerSettings.Length > 0)
                        {
                            MarkerSettings settings = markerSettings [0];

                            if (marker.id == settings.getMarkerId())
                            {
                                transformationM = marker.transformation;
//                                                      Debug.Log ("transformationM " + transformationM.ToString ());


                                GameObject ARGameObject = settings.getARGameObject();
                                if (ARGameObject != null)
                                {
                                    ARM = ARGameObject.transform.localToWorldMatrix * invertZM * transformationM.inverse * invertYM;
                                    //Debug.Log ("arM " + arM.ToString ());
                                    ARGameObject.SetActive(true);
                                    ARUtils.SetTransformFromMatrix(ARCamera.transform, ref ARM);
                                }
                            }
                        }
                    }
                }
                else
                {
                    List <Marker> findMarkers = markerDetector.getFindMarkers();
                    for (int i = 0; i < findMarkers.Count; i++)
                    {
                        Marker marker = findMarkers [i];

                        foreach (MarkerSettings settings in markerSettings)
                        {
                            if (marker.id == settings.getMarkerId())
                            {
                                transformationM = marker.transformation;
//                                                              Debug.Log ("transformationM " + transformationM.ToString ());

                                ARM = ARCamera.transform.localToWorldMatrix * invertYM * transformationM * invertZM;
                                //Debug.Log ("arM " + arM.ToString ());

                                GameObject ARGameObject = settings.getARGameObject();
                                if (ARGameObject != null)
                                {
                                    ARUtils.SetTransformFromMatrix(ARGameObject.transform, ref ARM);
                                    ARGameObject.SetActive(true);
                                }
                            }
                        }
                    }
                }


                Utils.matToTexture2D(rgbaMat, texture, webCamTextureToMatHelper.GetBufferColors());
            }
        }
Beispiel #22
0
 private void UpdateMarker(MarkerGridRow data, MarkerSettings settings)
 {
     if (data.Player != null)
     {
         World.Default.Map.MarkerManager.UpdateMarker(World.Default.Map, data.Player, settings);
     }
     else if (data.Tribe != null)
     {
         World.Default.Map.MarkerManager.UpdateMarker(World.Default.Map, data.Tribe, settings);
     }
 }