QuadrilateralInCamera.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using System.Collections.Generic;
  3. using o0.Geometry2D;
  4. using o0.Geometry2D.Float;
  5. using UnityEngine;
  6. namespace ZIM
  7. {
  8. // 屏幕识别使用,记录摄像机画面内的四边形
  9. public class QuadrilateralInCamera
  10. {
  11. public Vector2 CameraSize;
  12. public OrdinalQuadrilateral2 Quad;
  13. public QuadrilateralInCamera(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 cameraSize)
  14. {
  15. CameraSize = cameraSize;
  16. Quad = new OrdinalQuadrilateral2(a.o0Vector(), b.o0Vector(), c.o0Vector(), d.o0Vector());
  17. }
  18. public QuadrilateralInCamera(Vector a, Vector b, Vector c, Vector d, Vector cameraSize)
  19. {
  20. CameraSize = cameraSize.UnityVector();
  21. Quad = new OrdinalQuadrilateral2(a, b, c, d);
  22. }
  23. public QuadrilateralInCamera(IEnumerable<Vector> enumable, Vector2 cameraSize)
  24. {
  25. CameraSize = cameraSize;
  26. Quad = new OrdinalQuadrilateral2(enumable);
  27. }
  28. public QuadrilateralInCamera(OrdinalQuadrilateral2 quad, Vector2 cameraSize)
  29. {
  30. CameraSize = cameraSize;
  31. Quad = quad;
  32. }
  33. // 四边形是否完整的在屏幕内
  34. public bool IsQuadComplete()
  35. {
  36. if (Quad.A.x < Quad.B.x && Quad.A.y < Quad.C.y && Quad.B.y < Quad.D.y && Quad.C.x < Quad.D.x && Quad.A.x > 0 && Quad.A.y > 0 &&
  37. Quad.B.x < CameraSize.x && Quad.B.y > 0 && Quad.C.x > 0 && Quad.C.y < CameraSize.y && Quad.D.x < CameraSize.x && Quad.D.y < CameraSize.y)
  38. return true;
  39. return false;
  40. }
  41. public List<Vector2> GetVertexList()
  42. {
  43. return new List<Vector2>() {
  44. new Vector2(Quad[0].x / CameraSize.x, Quad[0].y / CameraSize.y),
  45. new Vector2(Quad[1].x / CameraSize.x, Quad[1].y / CameraSize.y),
  46. new Vector2(Quad[2].x / CameraSize.x, Quad[2].y / CameraSize.y),
  47. new Vector2(Quad[3].x / CameraSize.x, Quad[3].y / CameraSize.y)
  48. };
  49. }
  50. }
  51. }