コード例 #1
0
    private void CalculateSortedFrontFaces(
        IEnumerable <Opaque> opaqueObjs, LightViewTriangle lightTriangle)
    {
        Profiler.BeginSample("Calculate shadow front faces");
        sortedFrontFaces.Clear();

        foreach (Opaque opaque in opaqueObjs)
        {
            if (lightTriangle.CalculateFrontFace(opaque) is LineSegment frontFace)
            {
                sortedFrontFaces.Add(System.Tuple.Create(frontFace, opaque));
            }
        }
        sortedFrontFaces.Add(System.Tuple.Create(lightTriangle.FarEdge(), (Opaque)null));
        Profiler.EndSample();
        //foreach (var pair in sortedFrontFaces) {
        //    Debug.Log(pair.Item1 + ", " + pair.Item2);
        //    Debug.Log(
        //        lightTriangle.Angle(pair.Item1.p1) + ", " +
        //        lightTriangle.Angle(pair.Item1.p2));
        //}
        //MinimalUnion<Opaque>.CalculateAndSort(ref sortedFrontFaces, lightTriangle.GetOrigin(), lightTriangle.Angle);
        //MinimalUnionImproved<Opaque>.SortedMinimalUnion(ref sortedFrontFaces, lightTriangle.GetOrigin(), lightTriangle.Angle);
        MinimalUnionImprovedAgain <Opaque> .SortedMinimalUnion(ref sortedFrontFaces, lightTriangle.GetOrigin(), lightTriangle.Angle);

        //foreach (var pair in sortedFrontFaces) {
        //    Debug.Log(pair.Item1 + ", " + pair.Item2);
        //    Debug.Log(
        //        lightTriangle.Angle(pair.Item1.p1) + ", " +
        //        lightTriangle.Angle(pair.Item1.p2));
        //}
    }
コード例 #2
0
    void Update()
    {
#if UNITY_EDITOR
        bool selected = UnityEditor.Selection.activeGameObject == gameObject;
#else
        bool selected = true;
#endif
        if (selected)
        {
            segsCopy.Clear();
            foreach (var item in segs)
            {
                segsCopy.Add(item.ToTuple());
            }

            MinimalUnionImprovedAgain <string> .SortedMinimalUnion(
                ref segsCopy,
                lightPosition,
                (Vector2 vec) =>
                Vector2.SignedAngle(metricStart, vec - lightPosition)
                );
        }

        if (!Input.GetMouseButton(0))
        {
            return;
        }
        if (MouseMove(ref lightPosition))
        {
            return;
        }
        for (int i = 0; i < segs.Count; i++)
        {
            var seg = segs[i];
            if (MouseMove(ref seg))
            {
                segs[i] = seg;
                break;
            }
        }
    }