コード例 #1
0
    public void LoadCalibration(string path)
    {
        if (path == null || path.Length == 0)
        {
            return;
        }

        string json = "";

        try
        {
            string line;

            StreamReader theReader = new StreamReader(path, Encoding.Default);
            using (theReader)
            {
                do
                {
                    line = theReader.ReadLine();

                    if (line != null)
                    {
                        json += line;
                    }
                }while (line != null);
                theReader.Close();
            }
        }
        catch (Exception e)
        {
            //Console.WriteLine("{0}\n", e.Message);
            Debug.Log(e.Message);
            return;
        }
        var N = JSON.Parse(json);

        fieldOfView       = N["FieldOfView"].AsFloat;
        cameraCount       = N["Cameras"].Count;
        renderTextureSize = new Vector2(N["TextureWidth"].AsInt, N["TextureHeight"].AsInt);
        xDivisions        = N["XDivisions"].AsInt;
        yDivisions        = N["YDivisions"].AsInt;
        arrangement       = (CameraArragement)N["Arrangement"].AsInt;
        overlap           = new Vector2(N["OverlapX"].AsFloat, N["OverlapY"].AsFloat);
        viewportSize      = N["ViewportSize"].AsFloat;
        near = N["Near"].AsFloat;
        far  = N["Far"].AsFloat;
        projectionCameraSpace = N["Spacing"].AsFloat;

        DestroyCameras();
        InitCameras();


        for (int i = 0; i < cameraCount; i++)
        {
            ProjectionMesh projectionMesh = projectionCameras[i];

            projectionMesh.referenceCameraOffset.x = N["Cameras"][i]["OffsetX"].AsFloat;
            projectionMesh.referenceCameraOffset.y = N["Cameras"][i]["OffsetY"].AsFloat;

            projectionMesh.leftFadeRange  = N["Cameras"][i]["LeftFadeRange"].AsFloat;
            projectionMesh.leftFadeChoke  = N["Cameras"][i]["LeftFadeChoke"].AsFloat;
            projectionMesh.rightFadeRange = N["Cameras"][i]["RightFadeRange"].AsFloat;
            projectionMesh.rightFadeChoke = N["Cameras"][i]["RightFadeChoke"].AsFloat;

            projectionMesh.topFadeRange    = N["Cameras"][i]["TopFadeRange"].AsFloat;
            projectionMesh.topFadeChoke    = N["Cameras"][i]["TopFadeChoke"].AsFloat;
            projectionMesh.bottomFadeRange = N["Cameras"][i]["BottomFadeRange"].AsFloat;
            projectionMesh.bottomFadeChoke = N["Cameras"][i]["BottomFadeChoke"].AsFloat;


            projectionMesh.trapezoidAnchor = (ProjectionMesh.AnchorPosition)N["Cameras"][i]["TrapezoidAnchor"].AsInt;
            projectionMesh.trapezoidAngle  = N["Cameras"][i]["TrapezoidAngle"].AsFloat;
            projectionMesh.skewAnchor      = (ProjectionMesh.AnchorPosition)N["Cameras"][i]["SkewAnchor"].AsInt;
            projectionMesh.skewAngle       = N["Cameras"][i]["SkewAngle"].AsFloat;

            for (int j = 0; j < (xDivisions + 1); j++)
            {
                projectionMesh.topOffset[j]    = new Vector2(N["Cameras"][i]["TopOffset"][j]["x"].AsFloat, N["Cameras"][i]["TopOffset"][j]["y"].AsFloat);
                projectionMesh.bottomOffset[j] = new Vector2(N["Cameras"][i]["BottomOffset"][j]["x"].AsFloat, N["Cameras"][i]["BottomOffset"][j]["y"].AsFloat);
            }

            projectionMesh.CreateMesh();

            projectionMesh.BlendRefresh();
            projectionMesh.OffsetRefresh();
            projectionMesh.UpdateUI();
        }

        LinkUI();
        defaultCalibrationFile = path;
    }
コード例 #2
0
    public override void OnInspectorGUI()
    {
        //DrawDefaultInspector();

        serializedObject.Update();
        myScript = (ProjectionMesh)target;

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Reference Camera", EditorStyles.boldLabel);

        myScript.referenceCameraOffset = EditorGUILayout.Vector2Field("Pano Camera Offset", myScript.referenceCameraOffset);

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Blending", EditorStyles.boldLabel);

        float topFadeRange = EditorGUILayout.FloatField("Top Fade Range", myScript.topFadeRange);

        topFadeRange          = Mathf.Clamp(topFadeRange, 0f, 1f);
        myScript.topFadeRange = topFadeRange;

        float topFadeChoke = EditorGUILayout.FloatField("Top Fade Choke", myScript.topFadeChoke);

        topFadeChoke          = Mathf.Clamp(topFadeChoke, 0f, 0.999f);
        myScript.topFadeChoke = topFadeChoke;

        float bottomFadeRange = EditorGUILayout.FloatField("Bottom Fade Range", myScript.bottomFadeRange);;

        bottomFadeRange          = Mathf.Clamp(bottomFadeRange, 0f, 1f);
        myScript.bottomFadeRange = bottomFadeRange;

        float bottomFadeChoke = EditorGUILayout.FloatField("Bottom Fade Choke", myScript.bottomFadeChoke);

        bottomFadeChoke          = Mathf.Clamp(bottomFadeChoke, 0f, 0.999f);
        myScript.bottomFadeChoke = bottomFadeChoke;

        float leftFadeRange = EditorGUILayout.FloatField("Left Fade Range", myScript.leftFadeRange);

        leftFadeRange          = Mathf.Clamp(leftFadeRange, 0f, 1f);
        myScript.leftFadeRange = leftFadeRange;

        float leftFadeChoke = EditorGUILayout.FloatField("Left Fade Choke", myScript.leftFadeChoke);

        leftFadeChoke          = Mathf.Clamp(leftFadeChoke, 0f, 0.999f);
        myScript.leftFadeChoke = leftFadeChoke;

        float rightFadeRange = EditorGUILayout.FloatField("Right Fade Range", myScript.rightFadeRange);

        rightFadeRange          = Mathf.Clamp(rightFadeRange, 0f, 1f);
        myScript.rightFadeRange = rightFadeRange;

        float rightFadeChoke = EditorGUILayout.FloatField("Right Fade Choke", myScript.rightFadeChoke);

        rightFadeChoke          = Mathf.Clamp(rightFadeChoke, 0f, 0.999f);
        myScript.rightFadeChoke = rightFadeChoke;
        EditorGUILayout.Space();



        EditorGUILayout.LabelField("Custom Options", EditorStyles.boldLabel);
        switch (myScript.mode)
        {
        case ProjectionMesh.ProjectionMode.CUSTOM:

            myScript.trapezoidAngle  = EditorGUILayout.FloatField("Trapezoid Angle", myScript.trapezoidAngle);
            myScript.trapezoidAnchor = (ProjectionMesh.AnchorPosition)EditorGUILayout.EnumPopup("Trapezoid Anchor", myScript.trapezoidAnchor);

            myScript.skewAngle  = EditorGUILayout.FloatField("Skew Angle", myScript.skewAngle);
            myScript.skewAnchor = (ProjectionMesh.AnchorPosition)EditorGUILayout.EnumPopup("Skew Anchor", myScript.skewAnchor);

            if (myScript.topOffset == null ||
                myScript.prevXDivision != myScript.xDivisions ||
                myScript.prevYDivision != myScript.yDivisions)
            {
                myScript.topOffset    = new Vector2[myScript.xDivisions + 1];
                myScript.bottomOffset = new Vector2[myScript.xDivisions + 1];

                for (int i = 0; i < myScript.xDivisions + 1; i++)
                {
                    myScript.topOffset[i]    = Vector2.zero;
                    myScript.bottomOffset[i] = Vector2.zero;
                }
            }


            EditorGUILayout.Space();
            EditorGUILayout.BeginVertical();
            EditorGUILayout.LabelField("Top Offset", EditorStyles.boldLabel);
            for (int i = 0; i < myScript.xDivisions + 1; i++)
            {
                myScript.topOffset[i] = EditorGUILayout.Vector2Field(i + ":", myScript.topOffset[i]);
            }
            EditorGUILayout.EndVertical();
            EditorGUILayout.Space();
            EditorGUILayout.BeginVertical();
            EditorGUILayout.LabelField("Bottom Offset", EditorStyles.boldLabel);
            for (int i = 0; i < myScript.xDivisions + 1; i++)
            {
                myScript.bottomOffset[i] = EditorGUILayout.Vector2Field(i + ":", myScript.bottomOffset[i]);
            }
            EditorGUILayout.EndVertical();

            myScript.prevXDivision = myScript.xDivisions;
            myScript.prevYDivision = myScript.yDivisions;
            break;

        default:
            break;
        }


        EditorGUILayout.Space();
        GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout);

        foldoutStyle.fontStyle   = FontStyle.Bold;
        showReferenceGameObjects = EditorGUILayout.Foldout(showReferenceGameObjects, "Reference Game Objects", foldoutStyle);
        if (showReferenceGameObjects)
        {
            myScript.targetCamera           = (Camera)EditorGUILayout.ObjectField("Target Camera", myScript.targetCamera, typeof(Camera), true);
            myScript.projectionUI           = (ProjectionUI)EditorGUILayout.ObjectField("Calibration UI", myScript.projectionUI, typeof(ProjectionUI), true);
            myScript.controlPointsContainer = (Transform)EditorGUILayout.ObjectField("Control Points Container", myScript.controlPointsContainer, typeof(Transform), true);
            myScript.meshFilter             = (MeshFilter)EditorGUILayout.ObjectField("Mesh Filter", myScript.meshFilter, typeof(MeshFilter), true);
        }


        if (GUI.changed)
        {
            if (myScript.editVertexIndex < 0)
            {
                myScript.editVertexIndex = 0;
            }
            else if (myScript.editVertexIndex > (myScript.xDivisions + 1) * 2 - 1)
            {
                myScript.editVertexIndex = (myScript.xDivisions + 1) * 2 - 1;
            }
            myScript.ClearControlPoints();
            myScript.CreateMesh();
            myScript.BlendRefresh();

            //EditorUtility.SetDirty(myScript);
            EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
        }

        serializedObject.ApplyModifiedProperties();
    }