Просмотр исходного кода

屏幕坐标同步到infraredDemo

snowaterr 1 год назад
Родитель
Сommit
65a9aabeb8

+ 2 - 2
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenIdentification.cs

@@ -59,8 +59,8 @@ namespace o0.Project
         public ScreenIdentification()
         {
             Screen = new ScreenMap();
-            OnLocateScreenEnter += () => Debug.Log("OnLocateScreenEnter");
-            OnLocateScreenEnd += () => Debug.Log("OnLocateScreenEnd");
+            //OnLocateScreenEnter += () => Debug.Log("OnLocateScreenEnter");
+            //OnLocateScreenEnd += () => Debug.Log("OnLocateScreenEnd");
         }
 
         public void SetScreenQuad(QuadrilateralInCamera quad) => Screen.QuadInCamera = quad;

+ 9 - 11
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenMap.cs

@@ -34,20 +34,18 @@ namespace ZIM.Unity
             }
         }
 
-        // 刷新分辨率
-        public Vector2 CurCameraSize
+        // 当分辨率不同时,刷新分辨率并返回true,否则返回false
+        public bool RefreshCameraSize(Vector2 curSize)
         {
-            get => QuadInCamera.CameraSize.UnityVector();
-            set
+            var sizeNew = curSize.o0Vector();
+            if (QuadInCamera != null && QuadInCamera.CameraSize != sizeNew)
             {
-                var newSize = value.o0Vector();
-                if (QuadInCamera != null && QuadInCamera.CameraSize != newSize)
-                {
-                    UnityEngine.Debug.Log("[ScreenMap]根据分辨率映射: from " + QuadInCamera.SizeString + " to " + value);
-                    QuadInCamera.ReSize(newSize, ViewAspectRatioSetting);
-                    InitByQuad();
-                }
+                UnityEngine.Debug.Log("[ScreenMap]根据分辨率映射: from " + QuadInCamera.SizeString + " to " + curSize);
+                QuadInCamera.ReSize(sizeNew, ViewAspectRatioSetting);
+                InitByQuad();
+                return true;
             }
+            return false;
         }
 
         private void InitByQuad()

+ 1 - 1
Assets/InfraredProject/WebCamera/Script/ZIM/Other/QuadrilateralInCamera.cs

@@ -39,7 +39,7 @@ namespace ZIM.Unity
             Quad = quad;
         }
 
-        public string SizeString => $"[{CameraSize.x}, {CameraSize.y}]";
+        public string SizeString => $"({CameraSize.x}, {CameraSize.y})";
         public string QuadString => $"[({Quad.A.x}, {Quad.A.y}), ({Quad.B.x}, {Quad.B.y}), ({Quad.C.x}, {Quad.C.y}), ({Quad.D.x}, {Quad.D.y})]";
 
         // 需要标准化的坐标(即数值范围0-1)时使用,会自动根据当前的CameraSize转换

+ 8 - 2
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -342,7 +342,12 @@ public partial class ScreenLocate : MonoBehaviour
             Debug.Log("Init Red filterValue:" + redfilterValue);
             infraredLocate.SetBrightnessThreshold(redfilterValue);     // 参数是 红外灯的亮度阈值,阈值越小能够检测到的亮度就越低,默认值是0.93
         }
-        screenIdentification.Screen.CurCameraSize = getUVCCameraInfoSize;       // 同步分辨率
+
+        if (screenIdentification.Screen.RefreshCameraSize(getUVCCameraInfoSize))       // 同步分辨率, 分辨率变化后还需同步到InfraredDemo
+        {
+            ScreenLocate.quadUnityVectorList = screenIdentification.Screen.QuadInCamera.GetUnityVertexList();
+            SyncInfraredDemo();
+        }
 
         if (mode == Mode.ScreenLocateManual)
         {
@@ -637,6 +642,7 @@ public partial class ScreenLocate : MonoBehaviour
     }
     public void OnLocateScreenEnter()
     {
+        screenIdentification.Screen.QuadInCamera = null;
         DefaultResolutionIndex = InfraredDemoMain?.ResolutionIndex ?? 0;        // 记录一下进入前的分辨率(游戏场景的分辨率,比识别时更低)
         InfraredDemoMain?.SetResolutionNew(HighScreenLocateResolutionIndex);
         CreateUVCTexture2DIfNeeded();
@@ -761,7 +767,7 @@ public partial class ScreenLocate : MonoBehaviour
     {
         if (quadUnityVectorList.Count == 0) return;
         Vector2 texSize = getUVCCameraInfoSize;
-        Debug.Log("quadUnityVectorList" + quadUnityVectorList.Count);
+        Debug.Log("[SyncInfraredDemo] quadUnityVectorList Count: " + quadUnityVectorList.Count);
         //同步到infaredDemo
         FindObjectOfType<InfraredDemo>()?.SetLocatePointsToCameraRender(
             quadUnityVectorList,