/// <summary> /// Convierte el box en un TgcMesh /// </summary> /// <param name="meshName">Nombre de la malla que se va a crear</param> public TgcMesh toMesh(string meshName) { Device d3dDevice = GuiController.Instance.D3dDevice; //Obtener matriz para transformar vertices if (autoTransformEnable) { this.transform = Matrix.RotationYawPitchRoll(rotation.Y, rotation.X, rotation.Z) * Matrix.Translation(translation); } //Crear mesh con DiffuseMap if (texture != null) { //Crear Mesh Mesh d3dMesh = new Mesh(vertices.Length / 3, vertices.Length, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.DiffuseMapVertexElements, d3dDevice); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < vertices.Length; j++) { TgcSceneLoader.TgcSceneLoader.DiffuseMapVertex v = new TgcSceneLoader.TgcSceneLoader.DiffuseMapVertex(); CustomVertex.PositionColoredTextured vBox = vertices[j]; //vertices v.Position = Vector3.TransformCoordinate(vBox.Position, this.transform); //normals v.Normal = Vector3.Empty; //texture coordinates diffuseMap v.Tu = vBox.Tu; v.Tv = vBox.Tv; //color v.Color = vBox.Color; data.Write(v); } vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] indices = new short[vertices.Length]; for (int j = 0; j < indices.Length; j++) { indices[j] = (short)j; } ib.SetData(indices, 0, LockFlags.None); } //Calcular normales d3dMesh.ComputeNormals(); //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.DIFFUSE_MAP); tgcMesh.DiffuseMaps = new TgcTexture[] { texture.clone() }; tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; tgcMesh.AlphaBlendEnable = this.alphaBlendEnable; return(tgcMesh); } //Crear mesh con solo color else { //Crear Mesh Mesh d3dMesh = new Mesh(vertices.Length / 3, vertices.Length, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.VertexColorVertexElements, d3dDevice); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < vertices.Length; j++) { TgcSceneLoader.TgcSceneLoader.VertexColorVertex v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); CustomVertex.PositionColoredTextured vBox = vertices[j]; //vertices v.Position = Vector3.TransformCoordinate(vBox.Position, this.transform); //normals v.Normal = Vector3.Empty; //color v.Color = vBox.Color; data.Write(v); } vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] indices = new short[vertices.Length]; for (int j = 0; j < indices.Length; j++) { indices[j] = (short)j; } ib.SetData(indices, 0, LockFlags.None); } //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.VERTEX_COLOR); tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; return(tgcMesh); } }
/// <summary> /// Convierte el Triángulo en un TgcMesh /// </summary> /// <param name="meshName">Nombre de la malla que se va a crear</param> public TgcMesh toMesh(string meshName) { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear Mesh con solo color Mesh d3dMesh = new Mesh(1, 3, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.VertexColorVertexElements, d3dDevice); //Calcular normal: left-handed Vector3 normal = computeNormal(); int ci = color.ToArgb(); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); TgcSceneLoader.TgcSceneLoader.VertexColorVertex v; //a v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = a; v.Normal = normal; v.Color = ci; data.Write(v); //b v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = b; v.Normal = normal; v.Color = ci; data.Write(v); //c v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = c; v.Normal = normal; v.Color = ci; data.Write(v); vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] indices = new short[3]; for (int j = 0; j < indices.Length; j++) { indices[j] = (short)j; } ib.SetData(indices, 0, LockFlags.None); } //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.VERTEX_COLOR); tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; return tgcMesh; }
/// <summary> /// Convierte el TgcSphere en un TgcMesh /// </summary> /// <param name="meshName">Nombre de la malla que se va a crear</param> public TgcMesh toMesh(string meshName) { Device d3dDevice = GuiController.Instance.D3dDevice; //Obtener matriz para transformar vertices if (autoTransformEnable) { this.transform = Matrix.Scaling(radius, radius, radius) * Matrix.Scaling(Scale) * Matrix.RotationYawPitchRoll(rotation.Y, rotation.X, rotation.Z) * Matrix.Translation(translation); } //Crear mesh con DiffuseMap if (texture != null) { //Crear Mesh Mesh d3dMesh = new Mesh(indices.Count / 3, indices.Count, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.DiffuseMapVertexElements, d3dDevice); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < indices.Count; j++) { TgcSceneLoader.TgcSceneLoader.DiffuseMapVertex v = new TgcSceneLoader.TgcSceneLoader.DiffuseMapVertex(); Vertex.PositionColoredTexturedNormal vSphere = vertices[indices[j]]; //vertices v.Position = Vector3.TransformCoordinate(vSphere.getPosition(), this.transform); //normals v.Normal = vSphere.getNormal(); //texture coordinates diffuseMap v.Tu = vSphere.Tu; v.Tv = vSphere.Tv; //color v.Color = vSphere.Color; data.Write(v); } vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] vIndices = new short[indices.Count]; for (int j = 0; j < vIndices.Length; j++) { vIndices[j] = (short)j; } ib.SetData(vIndices, 0, LockFlags.None); } //Calcular normales //d3dMesh.ComputeNormals(); //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.DIFFUSE_MAP); tgcMesh.DiffuseMaps = new TgcTexture[] { texture.clone() }; tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; return tgcMesh; } //Crear mesh con solo color else { //Crear Mesh Mesh d3dMesh = new Mesh(indices.Count / 3, indices.Count, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.VertexColorVertexElements, d3dDevice); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < indices.Count; j++) { TgcSceneLoader.TgcSceneLoader.VertexColorVertex v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); Vertex.PositionColoredTexturedNormal vSphere = vertices[indices[j]]; //vertices v.Position = Vector3.TransformCoordinate(vSphere.getPosition(), this.transform); //normals v.Normal = vSphere.getNormal(); //color v.Color = vSphere.Color; data.Write(v); } vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] vIndices = new short[indices.Count]; for (int j = 0; j < vIndices.Length; j++) { vIndices[j] = (short)j; } ib.SetData(vIndices, 0, LockFlags.None); } //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.VERTEX_COLOR); tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; return tgcMesh; } }
/// <summary> /// Convierte el Triángulo en un TgcMesh /// </summary> /// <param name="meshName">Nombre de la malla que se va a crear</param> public TgcMesh toMesh(string meshName) { Device d3dDevice = GuiController.Instance.D3dDevice; //Crear Mesh con solo color Mesh d3dMesh = new Mesh(1, 3, MeshFlags.Managed, TgcSceneLoader.TgcSceneLoader.VertexColorVertexElements, d3dDevice); //Calcular normal: left-handed Vector3 normal = computeNormal(); int ci = color.ToArgb(); //Cargar VertexBuffer using (VertexBuffer vb = d3dMesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); TgcSceneLoader.TgcSceneLoader.VertexColorVertex v; //a v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = a; v.Normal = normal; v.Color = ci; data.Write(v); //b v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = b; v.Normal = normal; v.Color = ci; data.Write(v); //c v = new TgcSceneLoader.TgcSceneLoader.VertexColorVertex(); v.Position = c; v.Normal = normal; v.Color = ci; data.Write(v); vb.Unlock(); } //Cargar IndexBuffer en forma plana using (IndexBuffer ib = d3dMesh.IndexBuffer) { short[] indices = new short[3]; for (int j = 0; j < indices.Length; j++) { indices[j] = (short)j; } ib.SetData(indices, 0, LockFlags.None); } //Malla de TGC TgcMesh tgcMesh = new TgcMesh(d3dMesh, meshName, TgcMesh.MeshRenderType.VERTEX_COLOR); tgcMesh.Materials = new Material[] { TgcD3dDevice.DEFAULT_MATERIAL }; tgcMesh.createBoundingBox(); tgcMesh.Enabled = true; return(tgcMesh); }