diff options
Diffstat (limited to 'RTPObjExporter.cs')
-rw-r--r-- | RTPObjExporter.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/RTPObjExporter.cs b/RTPObjExporter.cs new file mode 100644 index 0000000..791de73 --- /dev/null +++ b/RTPObjExporter.cs @@ -0,0 +1,52 @@ +using System.IO; +using System.Text; +using UnityEngine; + +public class RTPObjExporter +{ + public static string MeshToString(MeshFilter mf) + { + Mesh sharedMesh = mf.sharedMesh; + Material[] sharedMaterials = mf.GetComponent<Renderer>().sharedMaterials; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.Append("g ").Append(mf.name).Append("\n"); + Vector3[] vertices = sharedMesh.vertices; + for (int i = 0; i < vertices.Length; i++) + { + Vector3 vector = vertices[i]; + stringBuilder.Append($"v {0f - vector.x} {vector.y} {vector.z}\n"); + } + stringBuilder.Append("\n"); + Vector3[] normals = sharedMesh.normals; + for (int j = 0; j < normals.Length; j++) + { + Vector3 vector2 = normals[j]; + stringBuilder.Append($"vn {0f - vector2.x} {vector2.y} {vector2.z}\n"); + } + stringBuilder.Append("\n"); + Vector2[] uv = sharedMesh.uv; + for (int k = 0; k < uv.Length; k++) + { + Vector3 vector3 = uv[k]; + stringBuilder.Append($"vt {vector3.x} {vector3.y}\n"); + } + for (int l = 0; l < sharedMesh.subMeshCount; l++) + { + stringBuilder.Append("\n"); + stringBuilder.Append("usemtl ").Append(sharedMaterials[l].name).Append("\n"); + stringBuilder.Append("usemap ").Append(sharedMaterials[l].name).Append("\n"); + int[] triangles = sharedMesh.GetTriangles(l); + for (int m = 0; m < triangles.Length; m += 3) + { + stringBuilder.Append(string.Format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n", triangles[m + 2] + 1, triangles[m + 1] + 1, triangles[m] + 1)); + } + } + return stringBuilder.ToString(); + } + + public static void MeshToFile(MeshFilter mf, string filename) + { + using StreamWriter streamWriter = new StreamWriter(filename); + streamWriter.Write(MeshToString(mf)); + } +} |