Esempio n. 1
0
        public void DisplayFrustum()
        {
            Entity       entity = new Entity(Entity);
            MeshRenderer mr     = entity.AddComponent <MeshRenderer>();

            mr.material_ = new MaterialDX11();
            mr.SetFillMode(FillMode.Wireframe);
            mr.material_.SetMainColor(1.0f, 1.0F, 1.0F, 1.0F);
            mr.model_ = ProjectionMesh.GetModel(GetProjection());
        }
Esempio n. 2
0
        public override void Initialize()
        {
            projector = (Projector)Entity.GetComponent(ComponentType.Projector);

            son = Entity.Append(new Entity());

            // Une "vue" pointe en z négatif alors on ajoute le modèle de projection qu'on retourne comme une crêpe
            sonmr = son.AddComponent <MeshRenderer>();
            sonmr.material_.SetMainColor(1.0f, 0.0f, 0.0f, 1.0f);
            sonmr.model_ = ProjectionMesh.GetModel(projector.Projection);
            sonmr.SetFillMode(SharpDX.Direct3D11.FillMode.Wireframe);
        }
Esempio n. 3
0
        public override void OnKeyDown(KeyboardEvent e)
        {
            float rotatecoef    = 0.03f;
            float translatecoef = 0.2f;

            // Field Of View

            if (e.keycode_ == KeyCode.Key_1)
            {
                projector.SetFrustum
                (
                    projector.GetFrustum().GetFieldOfView() + 0.01f,
                    projector.GetFrustum().GetRatio(),
                    projector.GetFrustum().GetNearPlane(),
                    projector.GetFrustum().GetFarPlane()
                );

                sonmr.model_ = ProjectionMesh.GetModel(projector.m_View.projection_);
            }

            if (e.keycode_ == KeyCode.Key_2)
            {
                projector.SetFrustum
                (
                    projector.GetFrustum().GetFieldOfView() - 0.01f,
                    projector.GetFrustum().GetRatio(),
                    projector.GetFrustum().GetNearPlane(),
                    projector.GetFrustum().GetFarPlane()
                );

                sonmr.model_ = ProjectionMesh.GetModel(projector.m_View.projection_);
            }

            // Rotations
            if (e.keycode_ == KeyCode.Key_T)
            {
                transform.RotateEuler(0.0f, rotatecoef, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_G)
            {
                transform.RotateEuler(0.0f, -rotatecoef, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_Y)
            {
                transform.RotateEuler(rotatecoef, 0.0f, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_H)
            {
                transform.RotateEuler(-rotatecoef, 0.0f, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_U)
            {
                transform.RotateEuler(0.0f, 0.0f, rotatecoef);
            }

            if (e.keycode_ == KeyCode.Key_J)
            {
                transform.RotateEuler(0.0f, 0.0f, rotatecoef);
            }

            // Translations
            if (e.keycode_ == KeyCode.Key_Z)
            {
                transform.Translate(0.0f, 0.0f, translatecoef);
            }

            if (e.keycode_ == KeyCode.Key_S)
            {
                transform.Translate(0.0f, 0.0f, -translatecoef);
            }

            if (e.keycode_ == KeyCode.Key_Q)
            {
                transform.Translate(-translatecoef, 0.0f, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_D)
            {
                transform.Translate(translatecoef, 0.0f, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_R)
            {
                transform.Translate(0.0f, translatecoef, 0.0f);
            }

            if (e.keycode_ == KeyCode.Key_F)
            {
                transform.Translate(0.0f, -translatecoef, 0.0f);
            }
        }
    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;
    }
    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();
    }
 void OnEnable()
 {
     myScript = (ProjectionMesh)target;
 }
Esempio n. 7
0
        static void Main()
        {
            ApplicationDX11 application = new ApplicationDX11(1280, 720);

            Camera.Main.Entity.AddComponent <Trackview>();

            MaterialDX11 projectorMaterial = new MaterialDX11("vDefault.cso", "pProjector.cso", "gDefault.cso");

            projectorMaterial.samplers.Add
            (
                new SamplerState
                (
                    ApplicationDX11.Instance.Device,
                    new SamplerStateDescription()
            {
                AddressU           = TextureAddressMode.Border,
                AddressV           = TextureAddressMode.Border,
                AddressW           = TextureAddressMode.Border,
                BorderColor        = new Color4(1.0f, 0.0f, 0.0f, 1.0f),
                ComparisonFunction = Comparison.LessEqual,
                Filter             = Filter.MinMagMipPoint,
                MaximumAnisotropy  = 0,
                MaximumLod         = sizeof(float),
                MinimumLod         = 0,
                MipLodBias         = 0
            }
                )
            );

            //MaterialDX11 testRender = new MaterialDX11("vDefault.cso", "pShowAlphaValue.cso", "gDefault.cso");

            Entity           pointLight = new Entity();
            DirectionalLight pl         = pointLight.AddComponent <DirectionalLight>();

            pl.SetSpecularIntensity(0.01f);
            pl.SetIntensity(1.0f);
            pointLight.transform_.SetPosition(0.0f, 20.0f, 0.0f);
            pointLight.transform_.RotateEuler(0.0f, 3.141592f / 1.5f, 0.0f);

            Entity       sphere   = new Entity();
            MeshRenderer spheremr = sphere.AddComponent <MeshRenderer>();

            spheremr.material_ = projectorMaterial;
            spheremr.model_    = Sphere.Mesh(1.0f, 30, 30);

            Entity       cube4   = new Entity();
            MeshRenderer cube4mr = cube4.AddComponent <MeshRenderer>();

            cube4mr.material_ = projectorMaterial;
            cube4mr.material_.SetMainColor(0.5f, 0.5f, 0.5f, 1.0F);
            cube4mr.model_ = Cube.Mesh;
            cube4.transform_.Translate(1.0f, 5.5f, 0.0f);
            cube4.transform_.SetScale(4.0f, 4.0f, 4.0f);

            sphere.transform_.Translate(10.0f, 7.0f, 7.0f);
            sphere.transform_.RotateEuler(0.0f, 3.141592f / 2.0f, 0.0f);
            sphere.transform_.SetScale(3.0f, 3.0f, 3.0f);

            Entity       floor   = new Entity();
            MeshRenderer floormr = floor.AddComponent <MeshRenderer>();

            floormr.material_ = projectorMaterial;
            floormr.model_    = Quad.GetMesh();

            floor.transform_.RotateEuler(0.0f, 3.141592f / 2.0f, 0.0f);
            floor.transform_.SetScale(40.0f, 40.0f, 40.0f);
            floor.transform_.Translate(0.0f, 0.0f, 0.0f);

            Entity       wallN   = new Entity();
            MeshRenderer wallNmr = wallN.AddComponent <MeshRenderer>();

            wallNmr.material_ = projectorMaterial;
            wallNmr.model_    = Quad.GetMesh();
            wallN.transform_.RotateEuler(0.0f, 0.0f, 0.0f);
            wallN.transform_.SetScale(40.0f, 40.0f, 40.0f);
            wallN.transform_.Translate(0.0f, 20.0f, 20.0f);

            Entity       wallS   = new Entity();
            MeshRenderer wallSmr = wallS.AddComponent <MeshRenderer>();

            wallSmr.material_ = projectorMaterial;
            wallSmr.model_    = Quad.GetMesh();

            wallS.transform_.RotateEuler(3.141592f, 0.0f, 0.0f);
            wallS.transform_.SetScale(40.0f, 40.0f, 40.0f);
            wallS.transform_.Translate(0.0f, 20.0f, -20.0f);

            Entity       wallE   = new Entity();
            MeshRenderer wallEmr = wallE.AddComponent <MeshRenderer>();

            wallEmr.material_ = projectorMaterial;
            wallEmr.model_    = Quad.GetMesh();


            wallE.transform_.RotateEuler(-3.141592f / 2.0f, 0.0f, 0.0f);
            wallE.transform_.SetScale(40.0f, 40.0f, 40.0f);
            wallE.transform_.Translate(-20.0f, 20.0f, 0.0f);

            ////application.scene_.Append(new BitmapImage(application.shadowmap.shaderResourceView_, testRender));

            Entity    proj      = new Entity();
            Projector projector = proj.AddComponent <Projector>();

            projector.SetProjection
            (
                new FrustumProjection
                (
                    3.141592f / 3.0f,
                    1.0f,
                    0.1f, 1000.0f
                )
            );

            projector.SetImage(ResourceManager.GetImageFromFile("blastoise.png"));

            MeshRenderer mrProjector = proj.AddComponent <MeshRenderer>();

            mrProjector.model_    = ProjectionMesh.GetModel(projector.Projection);
            mrProjector.material_ = new MaterialDX11();
            mrProjector.material_.SetMainColor(0.0f, 0.0f, 1.0f, 1.0f);
            mrProjector.SetFillMode(FillMode.Wireframe);


            //    )



            //    (new Projector(
            //    cam.GetRenderTextureSRV(),
            //    );
            //proj.transform_.Translate(0.0f, 10.0f, -10.0f);
            //proj.AddComponent<ProjectorBehavior>();
            application.Run();
        }