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); } } }
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); } } }
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); }
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); } } }
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); } } } }