private Mesh CreateMeshFromWowMeshWithMaterials(WowMeshWithMaterials wowMesh) { var mesh = new Mesh(); var vertices = wowMesh.Vertices .Select(x => new Vector3(x.Position.X, x.Position.Y, x.Position.Z)) .ToList(); var normals = wowMesh.Vertices .Select(x => new Vector3(x.Normal.X, x.Normal.Y, x.Normal.Z)) .ToList(); var uv1 = wowMesh.Vertices .Select(x => new Vector2(x.UV1.X, x.UV1.Y)) .ToList(); var uv2 = wowMesh.Vertices .Select(x => new Vector2(x.UV2.X, x.UV2.Y)) .ToList(); var boneWeights = wowMesh.Vertices .Select(x => new BoneWeight() { boneIndex0 = x.BoneIndexes[0], weight0 = x.BoneWeights[0], boneIndex1 = x.BoneIndexes[1], weight1 = x.BoneWeights[1], boneIndex2 = x.BoneIndexes[2], weight2 = x.BoneWeights[2], boneIndex3 = x.BoneIndexes[3], weight3 = x.BoneWeights[3], }) .ToArray(); mesh.SetVertices(vertices); mesh.SetNormals(normals); mesh.SetUVs(0, uv1); mesh.SetUVs(1, uv2); mesh.boneWeights = boneWeights; mesh.subMeshCount = wowMesh.Submeshes.Count; for (int submeshIdx = 0; submeshIdx < wowMesh.Submeshes.Count; submeshIdx++) { mesh.SetTriangles(wowMesh.Submeshes[submeshIdx].Triangles.Select(x => (int)x).ToList(), submeshIdx); } mesh.RecalculateBounds(); //mesh.RecalculateNormals(); return(mesh); }
private Material[] CreateMaterialsFromWowMeshWithMaterials(WowMeshWithMaterials wowMesh) { var materials = new Material[wowMesh.Submeshes.Count]; for (int submeshIdx = 0; submeshIdx < wowMesh.Submeshes.Count; submeshIdx++) { var whMaterial = wowMesh.Submeshes[submeshIdx].Material; var material = new Material(_standardShader); // Smoothness material.SetFloat("_Glossiness", 0); material.SetTexture("_MainTex", CreateTextureFromBitmap(whMaterial.MainImage.Bitmap)); materials[submeshIdx] = material; } return(materials); }
public WowSubmeshWithMaterials(WowMeshWithMaterials mesh, ushort[] triangles, WowMaterial material) { Mesh = mesh; Triangles = triangles; Material = material; }