//------------------------------------------------------------------------------------------------------------ public static OBJData EncodeOBJ(this Mesh lMesh) { OBJData lData = new OBJData { m_Vertices = new List <Vector3>(lMesh.vertices), m_UVs = new List <Vector2>(lMesh.uv), m_Normals = new List <Vector3>(lMesh.normals), m_UV2s = new List <Vector2>(lMesh.uv2), m_Colors = new List <Color>(lMesh.colors) }; int[] lIndices = null; OBJGroup lGroup = null; OBJFace lFace = null; OBJFaceVertex lFaceVertex = null; for (int lMCount = 0; lMCount < lMesh.subMeshCount; ++lMCount) { lIndices = lMesh.GetTriangles(lMCount); lGroup = new OBJGroup(lMesh.name + "_" + lMCount.ToString()); for (int lCount = 0; lCount < lIndices.Length; lCount += 3) { lFace = new OBJFace(); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount] : -1; lFace.AddVertex(lFaceVertex); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 1] : -1; lFace.AddVertex(lFaceVertex); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 2] : -1; lFace.AddVertex(lFaceVertex); lGroup.AddFace(lFace); } lData.m_Groups.Add(lGroup); } return(lData); }
//------------------------------------------------------------------------------------------------------------ private static void PushOBJFace(string lFaceLine) { PushOBJGroupIfNeeded(); var vertices = lFaceLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var face = new OBJFace(); foreach (var vertexString in vertices) { face.ParseVertex(vertexString); } m_CurrentGroup.AddFace(face); }
//------------------------------------------------------------------------------------------------------------ public static OBJData EncodeOBJ(this Mesh lMesh) { OBJData lData = new OBJData { m_Vertices = new List<Vector3>(lMesh.vertices), m_UVs = new List<Vector2>(lMesh.uv), m_Normals = new List<Vector3>(lMesh.normals), m_UV2s = new List<Vector2>(lMesh.uv1), m_Colors = new List<Color>(lMesh.colors) }; int[] lIndices = null; OBJGroup lGroup = null; OBJFace lFace = null; OBJFaceVertex lFaceVertex = null; for (int lMCount = 0; lMCount < lMesh.subMeshCount; ++lMCount) { lIndices = lMesh.GetTriangles(lMCount); lGroup = new OBJGroup(lMesh.name + "_" + lMCount.ToString()); for (int lCount = 0; lCount < lIndices.Length; lCount += 3) { lFace = new OBJFace(); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount] : -1; lFace.AddVertex(lFaceVertex); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 1] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 1] : -1; lFace.AddVertex(lFaceVertex); lFaceVertex = new OBJFaceVertex(); lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 2] : -1; lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 2] : -1; lFace.AddVertex(lFaceVertex); lGroup.AddFace(lFace); } lData.m_Groups.Add(lGroup); } return lData; }