Esempio n. 1
0
        public void Shutdown()
        {
            WorldSettings.Shutdown();
            WorldSettings = null;
            Camera        = null;

            foreach (IRenderer RenderAsset in Assets.Values)
            {
                RenderAsset.Shutdown();
            }

            foreach (SpatialGrid grid in navigationGrids)
            {
                grid?.Shutdown();
            }

            navigationGrids = null;
            translokatorGrid?.Shutdown();
            translokatorGrid = null;
            selectionBox.Shutdown();
            selectionBox = null;
            TranslationGizmo.Shutdown();
            TranslationGizmo = null;
            clouds.Shutdown();
            clouds = null;
            sky.Shutdown();
            sky    = null;
            Assets = null;
            D3D?.Shutdown();
            D3D = null;
        }
Esempio n. 2
0
        private void loadAllFiles()
        {
            Model model = this.model;

            List <string> path_gtm_list = new List <string>();


            // 로딩하고자 하는 모든 gtm 파일 리스트
            path_gtm_list.Add("knight.gtm");


            // 모든 gtm 파일 로딩
            if (RenderAsset.getRenderAsset() != null)
            {
                foreach (string path_gtm in path_gtm_list)
                {
                    RenderAsset.Load(path_gtm);
                }
            }
        }
Esempio n. 3
0
        private void PhysicsScene02()
        {
            SimulationObject simObject   = null;
            Rigidbody        rigidbody   = null;
            BoxCollider      boxCollider = null;

            Mesh[]       meshArray     = RenderAsset.Load("box.gtm", typeof(Mesh)) as Mesh[];
            Material[]   materialArray = RenderAsset.Load("box.gtm", typeof(Material)) as Material[];
            MeshFilter   meshFilter    = null;
            MeshRenderer meshRender    = null;

            Mesh     mesh     = meshArray[0];
            Material material = materialArray[0];

            Shader shader = new Shader();

            material.Shader = shader;


            bool enableFixedJoint     = true;
            bool enableHingeJoint     = true;
            bool enableCharacterJoint = true;



            // fixedjoint test
            if (enableFixedJoint)
            {
                Transform transform = null;

                // Root1
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot1";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(-5, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject1
                simObject      = model.AddObject();
                simObject.Name = "simObject1";


                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(-5, 0, 0);


                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                FixedJoint fixedjoint = Root.AddComponent <FixedJoint>();
                if (fixedjoint != null)
                {
                    // 연결 대상과 연결 지점 설정
                    fixedjoint.connectedBody   = simObject.GetComponent <Rigidbody>();
                    fixedjoint.connectedAnchor = new Vector3(0, -1.5f, 0);
                }
            }



            // hingejoint test
            if (enableHingeJoint)
            {
                Transform transform = null;

                // Root2
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot2";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(0, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject2
                simObject      = model.AddObject();
                simObject.Name = "simObject2";


                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(0, 0, 0);


                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                HingeJoint hingejoint = null;
                hingejoint = Root.AddComponent <HingeJoint>();
                if (hingejoint != null)
                {
                    // 연결 대상 설정
                    hingejoint.connectedBody = simObject.GetComponent <Rigidbody>();

                    // 연결 지점 설정
                    hingejoint.anchor          = new Vector3(0, 0, 0);
                    hingejoint.connectedAnchor = new Vector3(0, 1.5f, 0);

                    // 회전축 지정
                    hingejoint.axis = new Vector3(0, 0, 1);

                    // 회전 최소/최대각 지정
                    hingejoint.useLimits = true;

                    JointLimits jointlimits = hingejoint.limits;
                    jointlimits.min       = -70 * ((float)Math.PI / 180.0f);
                    jointlimits.max       = 70 * ((float)Math.PI / 180.0f);
                    jointlimits.minBounce = 1.0f;
                    jointlimits.maxBounce = 1.0f;
                    hingejoint.limits     = jointlimits;
                }
            }



            // characterjoint test
            if (enableCharacterJoint)
            {
                Transform transform = null;

                // Root3
                SimulationObject Root = model.AddObject();
                if (Root != null)
                {
                    Root.Name = "MyRoot3";

                    transform          = Root.GetComponent <Transform>();
                    transform.Position = new Vector3(5, 0, 0);

                    //add render component
                    meshFilter      = Root.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = Root.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody      = Root.AddComponent <Rigidbody>();
                    rigidbody.mass = 0;

                    boxCollider      = Root.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }

                // simObject3
                simObject      = model.AddObject();
                simObject.Name = "simObject3";

                transform          = simObject.GetComponent <Transform>();
                transform.Position = new Vector3(5, 0, 0);

                //add render component
                meshFilter      = simObject.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObject.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody = simObject.AddComponent <Rigidbody>();

                boxCollider      = simObject.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);

                CharacterJoint characterjoint = null;
                characterjoint = Root.AddComponent <CharacterJoint>();
                if (characterjoint != null)
                {
                    // 연결 대상 설정
                    characterjoint.connectedBody = simObject.GetComponent <Rigidbody>();

                    // 연결 지점 설정
                    characterjoint.anchor          = new Vector3(0, -1.5f, 0);
                    characterjoint.connectedAnchor = new Vector3(0, 1.5f, 0);

                    // 회전축 및 회전 제한각 설정
                    characterjoint.axis = new Vector3(0, 0, 1); // twist&swing axis
                    characterjoint.setLimit(((float)Math.PI) * 0.2f, ((float)Math.PI) * 0.2f, 0);
                }
            }
        }
Esempio n. 4
0
        private void PhysicsScene01()
        {
            SimulationObject simObj      = null;
            Rigidbody        rigidbody   = null;
            BoxCollider      boxCollider = null;

            Mesh[]       meshArray     = RenderAsset.Load("box.gtm", typeof(Mesh)) as Mesh[];
            Material[]   materialArray = RenderAsset.Load("box.gtm", typeof(Material)) as Material[];
            MeshFilter   meshFilter    = null;
            MeshRenderer meshRender    = null;

            Mesh     mesh     = meshArray[0];
            Material material = materialArray[0];

            Shader shader = new Shader();

            material.Shader = shader;


            // static body
            {
                simObj      = model.AddObject();
                simObj.Name = "GroundObj";

                Transform transform = simObj.GetComponent <Transform>();
                transform.Position   = new Vector3(0, -1, 0);
                transform.LocalScale = new Vector3(50, 0.1f, 50);

                //add render component
                meshFilter      = simObj.AddComponent <MeshFilter>();
                meshFilter.mesh = mesh;

                meshRender          = simObj.AddComponent <MeshRenderer>();
                meshRender.material = material;

                //add physics component
                rigidbody      = simObj.AddComponent <Rigidbody>();
                rigidbody.mass = 0;

                boxCollider      = simObj.AddComponent <BoxCollider>();
                boxCollider.size = new Vector3(1, 1, 1);
            }


            // dynamic body
            for (int i = 0; i < 10; i++)
            {
                simObj = model.AddObject();
                if (simObj != null)
                {
                    simObj.Name = "simObj" + i;

                    Transform transform = simObj.GetComponent <Transform>();
                    transform.Position = new Vector3(0, 20, 0);

                    //add render component
                    meshFilter      = simObj.AddComponent <MeshFilter>();
                    meshFilter.mesh = mesh;

                    meshRender          = simObj.AddComponent <MeshRenderer>();
                    meshRender.material = material;

                    //add physics component
                    rigidbody = simObj.AddComponent <Rigidbody>();
                    rigidbody.detectCollisions = false; // 충돌 이벤트 발생 하지 않음

                    boxCollider      = simObj.AddComponent <BoxCollider>();
                    boxCollider.size = new Vector3(1, 1, 1);
                }
            }
        }
Esempio n. 5
0
        public void Start()
        {
            temVertex[0] = new Vector3(-10.0f, 10.0f, 10.0f);
            temVertex[1] = new Vector3(10.0f, -10.0f, 10.0f);
            temVertex[2] = new Vector3(10.0f, 10.0f, 10.0f);
            temVertex[3] = new Vector3(-10.0f, -10.0f, 10.0f);
            temVertex[4] = new Vector3(-10.0f, 10.0f, -10.0f);
            temVertex[5] = new Vector3(10.0f, -10.0f, -10.0f);
            temVertex[6] = new Vector3(10.0f, 10.0f, -10.0f);
            temVertex[7] = new Vector3(-10.0f, -10.0f, -10.0f);

            temNormals[0] = new Vector3(-1.0f, 1.0f, 1.0f);
            temNormals[1] = new Vector3(1.0f, -1.0f, 1.0f);
            temNormals[2] = new Vector3(1.0f, 1.0f, 1.0f);
            temNormals[3] = new Vector3(-1.0f, -1.0f, 1.0f);
            temNormals[4] = new Vector3(-1.0f, 1.0f, -1.0f);
            temNormals[5] = new Vector3(1.0f, -1.0f, -1.0f);
            temNormals[6] = new Vector3(1.0f, 1.0f, -1.0f);
            temNormals[7] = new Vector3(-1.0f, -1.0f, -1.0f);

            temIndex = new ushort[36] {
                0, 3, 1, 2, 0, 1,                        /* front  */
                6, 5, 4, 5, 7, 4,                        /* back   */
                4, 7, 3, 0, 4, 3,                        /* left   */
                2, 1, 5, 6, 2, 5,                        /* right  */
                4, 0, 2, 6, 4, 2,                        /* top    */
                3, 7, 1, 7, 5, 1                         /* bottom */
            };

            // mesh를 생성합니다.
            mesh          = new ETE.Render.Data.Mesh();
            mesh.vertices = temVertex;
            mesh.normals  = temVertex;
            mesh.indices  = temIndex;
            //Dirty처리해주지 않으면 메쉬가 생성, 업데이트되지 않습니다. Mesh데이터를 수정하였다면 항상 Dirty해주세요.
            mesh.DirtyMeshData();


            // Shader를 생성합니다.
            RenderAsset.Load("shader/colormaterial.sh", typeof(Shader));
            RenderShaderMetaInfo[] shaderInfoArray = RenderAsset.GetMetaObjectsOfTypeAll("shader/colormaterial.sh", typeof(Shader)) as RenderShaderMetaInfo[];

            // Material을 생성합니다.
            material          = new ETE.Render.Data.Material(shaderInfoArray[0].dataObject as Shader);
            material.Ambient  = new Vector4(0.2f, 0.2f, 0.2f, 1.0f);
            material.Diffuse  = new Vector4(0.6f, 0.6f, 0.6f, 1.0f);
            material.Specular = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
            material.Emission = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);

            // MeshFilter를 생성합니다
            meshFilter      = SimObject.AddComponent <MeshFilter>();
            meshFilter.mesh = mesh;

            // MeshRenderer를 생성합니다.
            meshRenderer          = SimObject.AddComponent <MeshRenderer>();
            meshRenderer.material = material;

            // Transform을 수정합니다.
            transform            = GetComponent <Transform>();
            transform.LocalScale = new Vector3(2.0f, 0.3f, 2.0f);
            transform.Position   = new Vector3(0.0f, -4.0f, 0.0f);
        }
Esempio n. 6
0
        private void createModel()
        {
            //-----------------------------------
            //scene에서 사용할 모든 GTM 파일을 적으세요
            //mesh & material pool 구성
            if (RenderAsset.getRenderAsset() != null)
            {
                // 객체 로드
                RenderAsset.Load("tidus/tidus.gtm", typeof(Mesh));
                RenderAsset.Load("tidus/tidus.gtm", typeof(Material));
                RenderAsset.Load("shader/lighting.sh", typeof(Shader));

                //RenderAsset.Load("tidus/tidus.gtm", typeof(Mesh));
                //RenderAsset.Load("tidus/tidus.gtm", typeof(Material));
                //RenderAsset.Load("shader/lighting.sh", typeof(Shader));

                // 데이터 취득
                Mesh[]     meshArray     = RenderAsset.GetObjectsOfTypeAll(typeof(Mesh)) as Mesh[];
                Material[] materialArray = RenderAsset.GetObjectsOfTypeAll(typeof(Material)) as Material[];
                Shader[]   shaderArray   = RenderAsset.GetObjectsOfTypeAll(typeof(Shader)) as Shader[];

                // Create Model(Create Mesh by Model)
                int meshLength = meshArray.GetLength(0);

                for (int i = 0; i < meshLength; ++i)
                {
                    SimulationObject testObject = model.AddObject();
                    testObject.Name = meshArray[i].getMeshName() + "_Node";

                    Transform transform_test = testObject.GetComponent <Transform>();
                    transform_test.Position = new Vector3(0.0f, 0.0f, 0.0f);

                    MeshFilter meshfilter_test = testObject.AddComponent <MeshFilter>();
                    meshfilter_test.mesh = meshArray[i];

                    Material material_test = materialArray[i];
                    material_test.Shader = shaderArray[0];

                    MeshRenderer meshrenderer = testObject.AddComponent <MeshRenderer>();
                    meshrenderer.material = material_test;

                    //UserControl은 단순히 모델을 회전시켜주는 역할을 합니다.
                    UserControl.MeshControl mc = testObject.AddComponent <UserControl.MeshControl>();
                }

                // Create Cube(Create Mesh by Script)
                SimulationObject CubeObject = model.AddObject();
                CubeObject.Name = "CreateMesh_Test";

                Transform transform_Cube = CubeObject.GetComponent <Transform>();
                transform_Cube.Position = new Vector3(0.0f, 0.0f, 0.0f);

                UserControl.CreateMesh cm = CubeObject.AddComponent <UserControl.CreateMesh>();

                // Create Camera
                // 현재 있는 View 개수만큼 Camera를 생성합니다.
                int[] targetNumbers = ETE.Render.EGL.GLUserControlManager.Instance.getTargetNumbers();
                foreach (int targetnumber in targetNumbers)
                {
                    SimulationObject cameraObject = SimulationApplication.Instance.getModel().AddObject();
                    cameraObject.Name = "cameraObj";

                    ETE.Render.Component.Camera comp_camera = cameraObject.AddComponent <ETE.Render.Component.Camera>();
                    comp_camera.TargetDisplay    = targetnumber;
                    comp_camera.BackGround_Color = new Vector4(0.2f, 0.2f, 0.4f, 1.0f);
                    comp_camera.CameraOrder      = 0;
                    comp_camera.Near             = 2.0f;
                    comp_camera.Far          = 10000.0f;
                    comp_camera.FOV          = 35.0f;
                    comp_camera.Aspect_Ratio = 1.7021f;

                    // Camera의 위치 설정
                    Transform transform_camera = cameraObject.GetComponent <Transform>();
                    if (targetnumber == 0)
                    {
                        transform_camera.Position    = new Vector3(0.0f, 40.0f, 250.0f);
                        transform_camera.EulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
                    }
                    else if (targetnumber == 1)
                    {
                        transform_camera.Position    = new Vector3(0.0f, 250.0f, 0.0f);
                        transform_camera.EulerAngles = new Vector3(-90.0f, 0.0f, 0.0f);
                    }
                    else if (targetnumber == 2)
                    {
                        transform_camera.Position    = new Vector3(250.0f, 40.0f, 0.0f);
                        transform_camera.EulerAngles = new Vector3(0.0f, 90.0f, 0.0f);
                    }
                    else if (targetnumber == 3)
                    {
                        transform_camera.Position    = new Vector3(130.0f, 200.0f, 130.0f);
                        transform_camera.EulerAngles = new Vector3(-45.0f, 45.0f, 0.0f);
                    }
                }
            }
        }