public override void ChargeBuffer(ObjMeshContainer objMeshContainer, Mesh dxMesh, int index) { var objMesh = objMeshContainer.ListObjMesh[index]; //Cargar VertexBuffer using (var vb = dxMesh.VertexBuffer) { var data = vb.Lock(0, 0, LockFlags.None); var v = new VertexColorVertex(); objMesh.FaceTrianglesList.ForEach(face => { v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V1) - 1]; v.Normal = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn1) - 1]; v.Color = -16777047; //TODO que corresponde poner aca con respecto obj Mesh data.Write(v); v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V2) - 1]; v.Normal = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn2) - 1]; v.Color = -16777047; //TODO que corresponde poner aca con respecto obj Mesh data.Write(v); v.Position = objMeshContainer.VertexListV[Convert.ToInt32(face.V3) - 1]; v.Normal = objMeshContainer.VertexListVn[Convert.ToInt32(face.Vn3) - 1]; v.Color = -16777047; //TODO que corresponde poner aca con respecto obj Mesh data.Write(v); }); vb.Unlock(); } ChargeIndexBuffer(objMesh, dxMesh); }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcSkeletalMesh crearMeshSoloColor(TgcSkeletalMeshData meshData) { //Crear Mesh Mesh mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, device); //Cargar VertexBuffer using (VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < meshData.coordinatesIndices.Length; j++) { VertexColorVertex v = new VertexColorVertex(); //vertices int coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color int colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (IndexBuffer ib = mesh.IndexBuffer) { short[] indices = new short[meshData.coordinatesIndices.Length]; for (int i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Cargar esqueleto TgcSkeletalBone[] bones = loadSkeleton(meshData); TgcSkeletalVertexWeight[] verticesWeights = loadVerticesWeights(meshData, bones); //Cargar datos de meshData que interesan mantener como originales TgcSkeletalMesh.OriginalData origData = new TgcSkeletalMesh.OriginalData(); origData.coordinatesIndices = meshData.coordinatesIndices; origData.verticesCoordinates = meshData.verticesCoordinates; origData.colorIndices = meshData.colorIndices; origData.verticesColors = meshData.verticesColors; origData.texCoordinatesIndices = null; origData.textureCoordinates = null; //Crear mesh de TGC TgcSkeletalMesh tgcMesh = meshFactory.createNewMesh(mesh, meshData.name, TgcSkeletalMesh.MeshRenderType.VERTEX_COLOR, origData, bones, verticesWeights); return(tgcMesh); }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcKeyFrameMesh crearMeshSoloColor(TgcKeyFrameMeshData meshData) { //Crear Mesh var mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, D3DDevice.Instance.Device); //Cargar VertexBuffer using (var vb = mesh.VertexBuffer) { var data = vb.Lock(0, 0, LockFlags.None); for (var j = 0; j < meshData.coordinatesIndices.Length; j++) { var v = new VertexColorVertex(); //vertices var coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new TGCVector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color var colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (var ib = mesh.IndexBuffer) { var indices = new short[meshData.coordinatesIndices.Length]; for (var i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Cargar datos que originales que tienen que mantenerse var originalData = new OriginalData(); originalData.coordinatesIndices = meshData.coordinatesIndices; originalData.colorIndices = meshData.colorIndices; originalData.verticesColors = meshData.verticesColors; originalData.texCoordinatesIndices = null; originalData.textureCoordinates = null; //Crear mesh de TGC var tgcMesh = new TgcKeyFrameMesh(mesh, meshData.name, TgcKeyFrameMesh.MeshRenderType.VERTEX_COLOR, originalData); return(tgcMesh); }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcMesh crearMeshSoloColor(TgcMeshData meshData) { //Crear Mesh var mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, D3DDevice.Instance.Device); //Cargar VertexBuffer using (var vb = mesh.VertexBuffer) { var data = vb.Lock(0, 0, LockFlags.None); for (var j = 0; j < meshData.coordinatesIndices.Length; j++) { var v = new VertexColorVertex(); //vertices var coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //normals //puede haber una normal compartida para cada vertice del mesh if (meshData.verticesNormals.Length == meshData.verticesCoordinates.Length) { v.Normal = new Vector3( meshData.verticesNormals[coordIdx], meshData.verticesNormals[coordIdx + 1], meshData.verticesNormals[coordIdx + 2] ); } //o una normal propia por cada vertice de cada triangulo (version mejorada del exporter) else { var normalIdx = j * 3; v.Normal = new Vector3( meshData.verticesNormals[normalIdx], meshData.verticesNormals[normalIdx + 1], meshData.verticesNormals[normalIdx + 2] ); } //color var colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (var ib = mesh.IndexBuffer) { var indices = new short[meshData.coordinatesIndices.Length]; for (var i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Crear mesh de TGC var tgcMesh = MeshFactory.createNewMesh(mesh, meshData.name, TgcMesh.MeshRenderType.VERTEX_COLOR); return(tgcMesh); }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcSkeletalMesh crearMeshSoloColor(TgcSkeletalMeshData meshData) { //Crear Mesh Mesh mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, device); //Cargar esqueleto TgcSkeletalBone[] bones = loadSkeleton(meshData); TgcSkeletalVertexWeight[] verticesWeights = loadVerticesWeights(meshData, bones); //Cargar VertexBuffer using (VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < meshData.coordinatesIndices.Length; j++) { VertexColorVertex v = new VertexColorVertex(); //vertices int coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color int colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; //normal if (meshData.verticesNormals != null) { v.Normal = new Vector3( meshData.verticesNormals[coordIdx], meshData.verticesNormals[coordIdx + 1], meshData.verticesNormals[coordIdx + 2] ); } else { v.Normal = new Vector3(0, 0, 0); } //tangent if (meshData.verticesTangents != null) { v.Tangent = new Vector3( meshData.verticesTangents[coordIdx], meshData.verticesTangents[coordIdx + 1], meshData.verticesTangents[coordIdx + 2] ); } else { v.Tangent = new Vector3(0, 0, 0); } //binormal if (meshData.verticesBinormals != null) { v.Binormal = new Vector3( meshData.verticesBinormals[coordIdx], meshData.verticesBinormals[coordIdx + 1], meshData.verticesBinormals[coordIdx + 2] ); } else { v.Binormal = new Vector3(0, 0, 0); } //BlendWeights y BlendIndices TgcSkeletalVertexWeight vWeight = verticesWeights[meshData.coordinatesIndices[j]]; vWeight.createVector4WeightsAndIndices(out v.BlendWeights, out v.BlendIndices); data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (IndexBuffer ib = mesh.IndexBuffer) { short[] indices = new short[meshData.coordinatesIndices.Length]; for (int i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Crear mesh de TGC TgcSkeletalMesh tgcMesh = meshFactory.createNewMesh(mesh, meshData.name, TgcSkeletalMesh.MeshRenderType.VERTEX_COLOR, bones); return tgcMesh; }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcSkeletalMesh crearMeshSoloColor(TgcSkeletalMeshData meshData) { //Crear Mesh var mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, D3DDevice.Instance.Device); //Cargar esqueleto var bones = loadSkeleton(meshData); var verticesWeights = loadVerticesWeights(meshData, bones); //Cargar VertexBuffer using (var vb = mesh.VertexBuffer) { var data = vb.Lock(0, 0, LockFlags.None); for (var j = 0; j < meshData.coordinatesIndices.Length; j++) { var v = new VertexColorVertex(); //vertices var coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new TGCVector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color var colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; //normal if (meshData.verticesNormals != null) { v.Normal = new TGCVector3( meshData.verticesNormals[coordIdx], meshData.verticesNormals[coordIdx + 1], meshData.verticesNormals[coordIdx + 2] ); } else { v.Normal = TGCVector3.Empty; } //tangent if (meshData.verticesTangents != null) { v.Tangent = new TGCVector3( meshData.verticesTangents[coordIdx], meshData.verticesTangents[coordIdx + 1], meshData.verticesTangents[coordIdx + 2] ); } else { v.Tangent = TGCVector3.Empty; } //binormal if (meshData.verticesBinormals != null) { v.Binormal = new TGCVector3( meshData.verticesBinormals[coordIdx], meshData.verticesBinormals[coordIdx + 1], meshData.verticesBinormals[coordIdx + 2] ); } else { v.Binormal = TGCVector3.Empty; } //BlendWeights y BlendIndices var vWeight = verticesWeights[meshData.coordinatesIndices[j]]; vWeight.createVector4WeightsAndIndices(out v.BlendWeights, out v.BlendIndices); data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (var ib = mesh.IndexBuffer) { var indices = new short[meshData.coordinatesIndices.Length]; for (var i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Crear mesh de TGC var tgcMesh = MeshFactory.createNewSkeletalMesh(mesh, meshData.name, TgcSkeletalMesh.MeshRenderType.VERTEX_COLOR, bones); return(tgcMesh); }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcKeyFrameMesh crearMeshSoloColor(TgcKeyFrameMeshData meshData) { //Crear Mesh Mesh mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, device); //Cargar VertexBuffer using (VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < meshData.coordinatesIndices.Length; j++) { VertexColorVertex v = new VertexColorVertex(); //vertices int coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color int colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (IndexBuffer ib = mesh.IndexBuffer) { short[] indices = new short[meshData.coordinatesIndices.Length]; for (int i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Cargar datos que originales que tienen que mantenerse TgcKeyFrameMesh.OriginalData originalData = new TgcKeyFrameMesh.OriginalData(); originalData.coordinatesIndices = meshData.coordinatesIndices; originalData.colorIndices = meshData.colorIndices; originalData.verticesColors = meshData.verticesColors; originalData.texCoordinatesIndices = null; originalData.textureCoordinates = null; //Crear mesh de TGC TgcKeyFrameMesh tgcMesh = new TgcKeyFrameMesh(mesh, meshData.name, TgcKeyFrameMesh.MeshRenderType.VERTEX_COLOR, originalData); return tgcMesh; }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcMesh crearMeshSoloColor(TgcMeshData meshData) { //Crear Mesh Mesh mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, device); //Cargar VertexBuffer using (VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < meshData.coordinatesIndices.Length; j++) { VertexColorVertex v = new VertexColorVertex(); //vertices int coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //normals //puede haber una normal compartida para cada vertice del mesh if (meshData.verticesNormals.Length == meshData.verticesCoordinates.Length) { v.Normal = new Vector3( meshData.verticesNormals[coordIdx], meshData.verticesNormals[coordIdx + 1], meshData.verticesNormals[coordIdx + 2] ); } //o una normal propia por cada vertice de cada triangulo (version mejorada del exporter) else { int normalIdx = j * 3; v.Normal = new Vector3( meshData.verticesNormals[normalIdx], meshData.verticesNormals[normalIdx + 1], meshData.verticesNormals[normalIdx + 2] ); } //color int colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (IndexBuffer ib = mesh.IndexBuffer) { short[] indices = new short[meshData.coordinatesIndices.Length]; for (int i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Crear mesh de TGC TgcMesh tgcMesh = meshFactory.createNewMesh(mesh, meshData.name, TgcMesh.MeshRenderType.VERTEX_COLOR); return tgcMesh; }
/// <summary> /// Crea un mesh sin texturas, solo con VertexColors /// </summary> /// <param name="meshData"></param> private TgcSkeletalMesh crearMeshSoloColor(TgcSkeletalMeshData meshData) { //Crear Mesh Mesh mesh = new Mesh(meshData.coordinatesIndices.Length / 3, meshData.coordinatesIndices.Length, MeshFlags.Managed, VertexColorVertexElements, device); //Cargar esqueleto TgcSkeletalBone[] bones = loadSkeleton(meshData); TgcSkeletalVertexWeight[] verticesWeights = loadVerticesWeights(meshData, bones); //Cargar VertexBuffer using (VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); for (int j = 0; j < meshData.coordinatesIndices.Length; j++) { VertexColorVertex v = new VertexColorVertex(); //vertices int coordIdx = meshData.coordinatesIndices[j] * 3; v.Position = new Vector3( meshData.verticesCoordinates[coordIdx], meshData.verticesCoordinates[coordIdx + 1], meshData.verticesCoordinates[coordIdx + 2] ); //color int colorIdx = meshData.colorIndices[j]; v.Color = meshData.verticesColors[colorIdx]; //normal if (meshData.verticesNormals != null) { v.Normal = new Vector3( meshData.verticesNormals[coordIdx], meshData.verticesNormals[coordIdx + 1], meshData.verticesNormals[coordIdx + 2] ); } else { v.Normal = new Vector3(0, 0, 0); } //tangent if (meshData.verticesTangents != null) { v.Tangent = new Vector3( meshData.verticesTangents[coordIdx], meshData.verticesTangents[coordIdx + 1], meshData.verticesTangents[coordIdx + 2] ); } else { v.Tangent = new Vector3(0, 0, 0); } //binormal if (meshData.verticesBinormals != null) { v.Binormal = new Vector3( meshData.verticesBinormals[coordIdx], meshData.verticesBinormals[coordIdx + 1], meshData.verticesBinormals[coordIdx + 2] ); } else { v.Binormal = new Vector3(0, 0, 0); } //BlendWeights y BlendIndices TgcSkeletalVertexWeight vWeight = verticesWeights[meshData.coordinatesIndices[j]]; vWeight.createVector4WeightsAndIndices(out v.BlendWeights, out v.BlendIndices); data.Write(v); } vb.Unlock(); } //Cargar indexBuffer en forma plana using (IndexBuffer ib = mesh.IndexBuffer) { short[] indices = new short[meshData.coordinatesIndices.Length]; for (int i = 0; i < indices.Length; i++) { indices[i] = (short)i; } ib.SetData(indices, 0, LockFlags.None); } //Crear mesh de TGC TgcSkeletalMesh tgcMesh = meshFactory.createNewMesh(mesh, meshData.name, TgcSkeletalMesh.MeshRenderType.VERTEX_COLOR, bones); return(tgcMesh); }