protected static DataStructures.Models.Mesh AddMesh(DataStructures.Models.Model sledgeModel, Assimp.Mesh assimpMesh, Matrix4x4 selfMatrix) { var sledgeMesh = new DataStructures.Models.Mesh(0); List <MeshVertex> vertices = new List <MeshVertex>(); for (int i = 0; i < assimpMesh.VertexCount; i++) { var assimpVertex = assimpMesh.Vertices[i]; assimpVertex = selfMatrix * assimpVertex; var assimpNormal = assimpMesh.Normals[i]; assimpNormal = selfMatrix * assimpNormal; var assimpUv = assimpMesh.TextureCoordinateChannels[0][i]; vertices.Add(new MeshVertex(new CoordinateF(assimpVertex.X, -assimpVertex.Z, assimpVertex.Y), new CoordinateF(assimpNormal.X, -assimpNormal.Z, assimpNormal.Y), sledgeModel.Bones[0], assimpUv.X, -assimpUv.Y)); } foreach (var face in assimpMesh.Faces) { var triInds = face.Indices; for (var i = 1; i < triInds.Count - 1; i++) { sledgeMesh.Vertices.Add(new MeshVertex(vertices[triInds[0]].Location, vertices[triInds[0]].Normal, vertices[triInds[0]].BoneWeightings, vertices[triInds[0]].TextureU, vertices[triInds[0]].TextureV)); sledgeMesh.Vertices.Add(new MeshVertex(vertices[triInds[i + 1]].Location, vertices[triInds[i + 1]].Normal, vertices[triInds[i + 1]].BoneWeightings, vertices[triInds[i + 1]].TextureU, vertices[triInds[i + 1]].TextureV)); sledgeMesh.Vertices.Add(new MeshVertex(vertices[triInds[i]].Location, vertices[triInds[i]].Normal, vertices[triInds[i]].BoneWeightings, vertices[triInds[i]].TextureU, vertices[triInds[i]].TextureV)); } } return(sledgeMesh); }
protected static void AddNode(Scene scene, Node node, DataStructures.Models.Model model, DataStructures.Models.Texture tex, Matrix4x4 parentMatrix) { Matrix4x4 selfMatrix = node.Transform * parentMatrix; foreach (var meshIndex in node.MeshIndices) { DataStructures.Models.Mesh sledgeMesh = AddMesh(model, scene.Meshes[meshIndex], selfMatrix); foreach (var v in sledgeMesh.Vertices) { v.TextureU *= tex.Width; v.TextureV *= tex.Height; } model.AddMesh("mesh", 0, sledgeMesh); } foreach (var subNode in node.Children) { AddNode(scene, subNode, model, tex, selfMatrix); } }