From 0f80b185b25e0e5d31f9ccae5f3025dda0699eaa Mon Sep 17 00:00:00 2001 From: Tim Leader Date: Fri, 7 Nov 2014 19:34:10 +0000 Subject: [PATCH 01/14] Initial Commit --- Editor.meta | 5 + Editor/OBJEditor.cs | 50 + Editor/OBJEditor.cs.meta | 8 + Examples.meta | 5 + Examples/Meshes.meta | 5 + Examples/Meshes/Teapot.obj | 2354 +++++++++++++++++ Examples/Meshes/Teapot.obj.meta | 66 + Examples/Scenes.meta | 5 + Examples/Scenes/Example.unity | Bin 0 -> 18064 bytes Examples/Scenes/Example.unity.meta | 4 + Examples/Scripts.meta | 5 + Examples/Scripts/Example.cs | 51 + Examples/Scripts/Example.cs.meta | 8 + Plugins.meta | 5 + Plugins/Extension.meta | 5 + Plugins/Extension/GameObjectExtension.cs | 112 + Plugins/Extension/GameObjectExtension.cs.meta | 8 + Plugins/Extension/MeshExtension.cs | 600 +++++ Plugins/Extension/MeshExtension.cs.meta | 8 + Plugins/Extension/StringExtensions.cs | 43 + Plugins/Extension/StringExtensions.cs.meta | 8 + Plugins/Extension/Texture2DExtension.cs | 55 + Plugins/Extension/Texture2DExtension.cs.meta | 8 + Plugins/Extension/TransformExtension.cs | 28 + Plugins/Extension/TransformExtension.cs.meta | 8 + Plugins/Extension/UnityExtension.cs | 239 ++ Plugins/Extension/UnityExtension.cs.meta | 8 + Plugins/Extension/VectorExtension.cs | 35 + Plugins/Extension/VectorExtension.cs.meta | 8 + Plugins/Mesh.meta | 5 + Plugins/Mesh/OBJ.meta | 5 + Plugins/Mesh/OBJ/OBJData.cs | 18 + Plugins/Mesh/OBJ/OBJData.cs.meta | 8 + Plugins/Mesh/OBJ/OBJFace.cs | 101 + Plugins/Mesh/OBJ/OBJFace.cs.meta | 8 + Plugins/Mesh/OBJ/OBJFaceVertex.cs | 10 + Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta | 8 + Plugins/Mesh/OBJ/OBJGroup.cs | 27 + Plugins/Mesh/OBJ/OBJGroup.cs.meta | 8 + Plugins/Mesh/OBJ/OBJLoader.cs | 216 ++ Plugins/Mesh/OBJ/OBJLoader.cs.meta | 8 + Plugins/Mesh/OBJ/OBJMaterial.cs | 42 + Plugins/Mesh/OBJ/OBJMaterial.cs.meta | 8 + Plugins/Utils.meta | 5 + Plugins/Utils/Int32Converter.cs | 39 + Plugins/Utils/Int32Converter.cs.meta | 8 + Readme.txt | 36 + Readme.txt.meta | 4 + 48 files changed, 4308 insertions(+) create mode 100644 Editor.meta create mode 100644 Editor/OBJEditor.cs create mode 100644 Editor/OBJEditor.cs.meta create mode 100644 Examples.meta create mode 100644 Examples/Meshes.meta create mode 100644 Examples/Meshes/Teapot.obj create mode 100644 Examples/Meshes/Teapot.obj.meta create mode 100644 Examples/Scenes.meta create mode 100644 Examples/Scenes/Example.unity create mode 100644 Examples/Scenes/Example.unity.meta create mode 100644 Examples/Scripts.meta create mode 100644 Examples/Scripts/Example.cs create mode 100644 Examples/Scripts/Example.cs.meta create mode 100644 Plugins.meta create mode 100644 Plugins/Extension.meta create mode 100644 Plugins/Extension/GameObjectExtension.cs create mode 100644 Plugins/Extension/GameObjectExtension.cs.meta create mode 100644 Plugins/Extension/MeshExtension.cs create mode 100644 Plugins/Extension/MeshExtension.cs.meta create mode 100644 Plugins/Extension/StringExtensions.cs create mode 100644 Plugins/Extension/StringExtensions.cs.meta create mode 100644 Plugins/Extension/Texture2DExtension.cs create mode 100644 Plugins/Extension/Texture2DExtension.cs.meta create mode 100644 Plugins/Extension/TransformExtension.cs create mode 100644 Plugins/Extension/TransformExtension.cs.meta create mode 100644 Plugins/Extension/UnityExtension.cs create mode 100644 Plugins/Extension/UnityExtension.cs.meta create mode 100644 Plugins/Extension/VectorExtension.cs create mode 100644 Plugins/Extension/VectorExtension.cs.meta create mode 100644 Plugins/Mesh.meta create mode 100644 Plugins/Mesh/OBJ.meta create mode 100644 Plugins/Mesh/OBJ/OBJData.cs create mode 100644 Plugins/Mesh/OBJ/OBJData.cs.meta create mode 100644 Plugins/Mesh/OBJ/OBJFace.cs create mode 100644 Plugins/Mesh/OBJ/OBJFace.cs.meta create mode 100644 Plugins/Mesh/OBJ/OBJFaceVertex.cs create mode 100644 Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta create mode 100644 Plugins/Mesh/OBJ/OBJGroup.cs create mode 100644 Plugins/Mesh/OBJ/OBJGroup.cs.meta create mode 100644 Plugins/Mesh/OBJ/OBJLoader.cs create mode 100644 Plugins/Mesh/OBJ/OBJLoader.cs.meta create mode 100644 Plugins/Mesh/OBJ/OBJMaterial.cs create mode 100644 Plugins/Mesh/OBJ/OBJMaterial.cs.meta create mode 100644 Plugins/Utils.meta create mode 100644 Plugins/Utils/Int32Converter.cs create mode 100644 Plugins/Utils/Int32Converter.cs.meta create mode 100644 Readme.txt create mode 100644 Readme.txt.meta diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..b944d9f --- /dev/null +++ b/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5c86e6fe65d4e4946b243172e73ba161 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Editor/OBJEditor.cs b/Editor/OBJEditor.cs new file mode 100644 index 0000000..2dba06e --- /dev/null +++ b/Editor/OBJEditor.cs @@ -0,0 +1,50 @@ + +using System; +using System.IO; +using System.Collections; + +using UnityEngine; +using UnityEditor; + +using UnityExtension; + +public class OBJWindow : EditorWindow +{ + //------------------------------------------------------------------------------------------------------------ + private MeshFilter m_MeshFilter = null; + + //------------------------------------------------------------------------------------------------------------ + [MenuItem("OBJ-IO/OBJ Mesh Exporter")] + public static void Execute() + { + OBJWindow.GetWindow(); + } + + //------------------------------------------------------------------------------------------------------------ + private void OnGUI() + { + m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true); + + if (m_MeshFilter != null) + { + if (GUILayout.Button("Export OBJ")) + { + var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj"); + + if (File.Exists(lOutputPath)) + { + File.Delete(lOutputPath); + } + + var lStream = new FileStream(lOutputPath, FileMode.Create); + var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } + } + else + { + GUILayout.Label("Please provide a MeshFilter"); + } + } +} diff --git a/Editor/OBJEditor.cs.meta b/Editor/OBJEditor.cs.meta new file mode 100644 index 0000000..e0f5e91 --- /dev/null +++ b/Editor/OBJEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5cb377fb273c8634296cc421905b1d34 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Examples.meta b/Examples.meta new file mode 100644 index 0000000..0a599e9 --- /dev/null +++ b/Examples.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 33368388f581b994fab7f5ef248c0f63 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Examples/Meshes.meta b/Examples/Meshes.meta new file mode 100644 index 0000000..616e31a --- /dev/null +++ b/Examples/Meshes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: e0433cb2bd36d3942883bf0f0998e2bb +folderAsset: yes +DefaultImporter: + userData: diff --git a/Examples/Meshes/Teapot.obj b/Examples/Meshes/Teapot.obj new file mode 100644 index 0000000..71ee314 --- /dev/null +++ b/Examples/Meshes/Teapot.obj @@ -0,0 +1,2354 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 06.03.2014 21:07:42 + +# +# object Teapot001 +# + +v 17.3454 -6.9354 33.2189 +v 18.7821 0.3405 33.2189 +v 19.0443 0.3405 32.2275 +v 17.5874 -7.0383 32.2275 +v 17.6261 -7.0548 33.5494 +v 19.0863 0.3405 33.5494 +v 18.1971 -7.2977 33.2189 +v 19.7053 0.3405 33.2189 +v 18.8261 -7.5654 32.2275 +v 20.3872 0.3405 32.2275 +v 13.4063 -12.8209 33.2189 +v 13.5925 -13.0071 32.2275 +v 13.6223 -13.0369 33.5494 +v 14.0618 -13.4764 33.2189 +v 14.5459 -13.9605 32.2275 +v 7.5208 -16.7600 33.2189 +v 7.6237 -17.0020 32.2275 +v 7.6402 -17.0407 33.5494 +v 7.8831 -17.6117 33.2189 +v 8.1508 -18.2407 32.2275 +v 0.2449 -18.1967 33.2189 +v 0.2449 -18.4589 32.2275 +v 0.2449 -18.5009 33.5494 +v 0.2449 -19.1199 33.2189 +v 0.2449 -19.8018 32.2275 +v -7.2460 -16.7600 33.2189 +v -7.6437 -17.0020 32.2275 +v -7.2140 -17.0407 33.5494 +v -7.4012 -17.6117 33.2189 +v -7.6609 -18.2407 32.2275 +v -13.1076 -12.8209 33.2189 +v -13.5558 -13.0071 32.2275 +v -13.1891 -13.0369 33.5494 +v -13.5790 -13.4764 33.2189 +v -14.0560 -13.9605 32.2275 +v -16.9272 -6.9354 33.2189 +v -17.2674 -7.0383 32.2275 +v -17.1574 -7.0548 33.5494 +v -17.7098 -7.2977 33.2189 +v -18.3362 -7.5654 32.2275 +v -18.2922 0.3405 33.2189 +v -18.5544 0.3405 32.2275 +v -18.5964 0.3405 33.5494 +v -19.2154 0.3405 33.2189 +v -19.8973 0.3405 32.2275 +v -16.8556 7.6163 33.2189 +v -17.0975 7.7192 32.2275 +v -17.1362 7.7357 33.5494 +v -17.7072 7.9786 33.2189 +v -18.3362 8.2463 32.2275 +v -12.9164 13.5018 33.2189 +v -13.1026 13.6880 32.2275 +v -13.1324 13.7178 33.5494 +v -13.5719 14.1573 33.2189 +v -14.0560 14.6414 32.2275 +v -7.0309 17.4410 33.2189 +v -7.1338 17.6829 32.2275 +v -7.1503 17.7216 33.5494 +v -7.3932 18.2926 33.2189 +v -7.6609 18.9216 32.2275 +v 0.2449 18.8776 33.2189 +v 0.2449 19.1399 32.2275 +v 0.2449 19.1818 33.5494 +v 0.2449 19.8008 33.2189 +v 0.2449 20.4827 32.2275 +v 7.5208 17.4410 33.2189 +v 7.6237 17.6829 32.2275 +v 7.6402 17.7216 33.5494 +v 7.8831 18.2926 33.2189 +v 8.1508 18.9216 32.2275 +v 13.4063 13.5018 33.2189 +v 13.5925 13.6880 32.2275 +v 13.6223 13.7178 33.5494 +v 14.0618 14.1573 33.2189 +v 14.5459 14.6414 32.2275 +v 17.3455 7.6163 33.2189 +v 17.5874 7.7192 32.2275 +v 17.6261 7.7357 33.5494 +v 18.1971 7.9786 33.2189 +v 18.8261 8.2463 32.2275 +v 21.1004 -8.5330 26.9559 +v 22.8525 0.3405 26.9559 +v 23.0843 -9.3771 21.7788 +v 25.0031 0.3405 21.7788 +v 24.4876 -9.9742 16.7904 +v 26.5242 0.3405 16.7904 +v 25.0199 -10.2006 12.0853 +v 27.1012 0.3405 12.0853 +v 16.2963 -15.7109 26.9559 +v 17.8232 -17.2378 21.7788 +v 18.9032 -18.3178 16.7904 +v 19.3129 -18.7275 12.0853 +v 9.1184 -20.5150 26.9559 +v 9.9625 -22.4989 21.7788 +v 10.5596 -23.9022 16.7904 +v 10.7860 -24.4345 12.0853 +v 0.2449 -22.2671 26.9559 +v 0.2449 -24.4177 21.7788 +v 0.2449 -25.9388 16.7904 +v 0.2449 -26.5158 12.0853 +v -8.6285 -20.5150 26.9559 +v -9.4726 -22.4989 21.7788 +v -10.0697 -23.9022 16.7904 +v -10.2961 -24.4345 12.0853 +v -15.8064 -15.7109 26.9559 +v -17.3333 -17.2378 21.7788 +v -18.4133 -18.3178 16.7904 +v -18.8230 -18.7275 12.0853 +v -20.6105 -8.5330 26.9559 +v -22.5944 -9.3771 21.7788 +v -23.9977 -9.9742 16.7904 +v -24.5300 -10.2006 12.0853 +v -22.3626 0.3405 26.9559 +v -24.5132 0.3405 21.7788 +v -26.0343 0.3405 16.7904 +v -26.6113 0.3405 12.0853 +v -20.6105 9.2139 26.9559 +v -22.5944 10.0580 21.7788 +v -23.9977 10.6551 16.7904 +v -24.5300 10.8815 12.0853 +v -15.8064 16.3918 26.9559 +v -17.3333 17.9187 21.7788 +v -18.4133 18.9988 16.7904 +v -18.8230 19.4084 12.0853 +v -8.6285 21.1959 26.9559 +v -9.4726 23.1798 21.7788 +v -10.0697 24.5831 16.7904 +v -10.2961 25.1154 12.0853 +v 0.2449 22.9480 26.9559 +v 0.2449 25.0986 21.7788 +v 0.2449 26.6197 16.7904 +v 0.2449 27.1967 12.0853 +v 9.1184 21.1959 26.9559 +v 9.9625 23.1798 21.7788 +v 10.5596 24.5831 16.7904 +v 10.7860 25.1154 12.0853 +v 16.2963 16.3918 26.9559 +v 17.8232 17.9187 21.7788 +v 18.9032 18.9988 16.7904 +v 19.3129 19.4084 12.0853 +v 21.1004 9.2139 26.9559 +v 23.0843 10.0580 21.7788 +v 24.4876 10.6551 16.7904 +v 25.0199 10.8815 12.0853 +v 24.0521 -9.7889 8.1041 +v 26.0522 0.3405 8.1041 +v 21.9230 -8.8830 5.1614 +v 23.7442 0.3405 5.1614 +v 19.7939 -7.9771 3.1630 +v 21.4362 0.3405 3.1630 +v 18.8261 -7.5654 2.0142 +v 20.3872 0.3405 2.0142 +v 18.5681 -17.9827 8.1041 +v 16.9294 -16.3440 5.1614 +v 15.2908 -14.7054 3.1630 +v 14.5459 -13.9605 2.0142 +v 10.3743 -23.4667 8.1041 +v 9.4684 -21.3376 5.1614 +v 8.5625 -19.2085 3.1630 +v 8.1508 -18.2407 2.0142 +v 0.2449 -25.4668 8.1041 +v 0.2449 -23.1588 5.1614 +v 0.2449 -20.8508 3.1630 +v 0.2449 -19.8018 2.0142 +v -9.8844 -23.4667 8.1041 +v -8.9785 -21.3376 5.1614 +v -8.0726 -19.2085 3.1630 +v -7.6609 -18.2407 2.0142 +v -18.0782 -17.9827 8.1041 +v -16.4395 -16.3440 5.1614 +v -14.8009 -14.7054 3.1630 +v -14.0560 -13.9605 2.0142 +v -23.5622 -9.7889 8.1041 +v -21.4331 -8.8830 5.1614 +v -19.3040 -7.9771 3.1630 +v -18.3362 -7.5654 2.0142 +v -25.5623 0.3405 8.1041 +v -23.2543 0.3405 5.1614 +v -20.9463 0.3405 3.1630 +v -19.8973 0.3405 2.0142 +v -23.5622 10.4698 8.1041 +v -21.4331 9.5639 5.1614 +v -19.3040 8.6580 3.1630 +v -18.3362 8.2463 2.0142 +v -18.0782 18.6636 8.1041 +v -16.4395 17.0249 5.1614 +v -14.8009 15.3863 3.1630 +v -14.0560 14.6414 2.0142 +v -9.8844 24.1476 8.1041 +v -8.9785 22.0185 5.1614 +v -8.0726 19.8894 3.1630 +v -7.6609 18.9216 2.0142 +v 0.2449 26.1477 8.1041 +v 0.2449 23.8397 5.1614 +v 0.2449 21.5317 3.1630 +v 0.2449 20.4827 2.0142 +v 10.3743 24.1476 8.1041 +v 9.4684 22.0185 5.1614 +v 8.5625 19.8894 3.1630 +v 8.1508 18.9216 2.0142 +v 18.5681 18.6636 8.1041 +v 16.9294 17.0249 5.1614 +v 15.2908 15.3863 3.1630 +v 14.5459 14.6414 2.0142 +v 24.0521 10.4698 8.1041 +v 21.9230 9.5639 5.1614 +v 19.7939 8.6580 3.1630 +v 18.8261 8.2463 2.0142 +v 18.4052 -7.3862 1.2746 +v 19.9308 0.3405 1.2746 +v 16.1551 -6.4289 0.6294 +v 17.4917 0.3405 0.6294 +v 10.5953 -4.0633 0.1731 +v 11.4648 0.3405 0.1731 +v 0.2449 0.3405 0.0000 +v 14.2219 -13.6365 1.2746 +v 12.4902 -11.9048 0.6294 +v 8.2110 -7.6256 0.1731 +v 7.9717 -17.8198 1.2746 +v 7.0143 -15.5697 0.6294 +v 4.6487 -10.0098 0.1731 +v 0.2449 -19.3454 1.2746 +v 0.2449 -16.9063 0.6294 +v 0.2449 -10.8794 0.1731 +v -7.4818 -17.8198 1.2746 +v -6.5244 -15.5697 0.6294 +v -4.1588 -10.0098 0.1731 +v -13.7320 -13.6365 1.2746 +v -12.0003 -11.9048 0.6294 +v -7.7211 -7.6256 0.1731 +v -17.9153 -7.3862 1.2746 +v -15.6652 -6.4289 0.6294 +v -10.1054 -4.0633 0.1731 +v -19.4409 0.3405 1.2746 +v -17.0018 0.3405 0.6294 +v -10.9749 0.3405 0.1731 +v -17.9153 8.0672 1.2746 +v -15.6652 7.1098 0.6294 +v -10.1054 4.7442 0.1731 +v -13.7320 14.3174 1.2746 +v -12.0003 12.5857 0.6294 +v -7.7211 8.3065 0.1731 +v -7.4818 18.5007 1.2746 +v -6.5244 16.2506 0.6294 +v -4.1588 10.6908 0.1731 +v 0.2449 20.0263 1.2746 +v 0.2449 17.5872 0.6294 +v 0.2449 11.5603 0.1731 +v 7.9717 18.5007 1.2746 +v 7.0143 16.2506 0.6294 +v 4.6487 10.6908 0.1731 +v 14.2219 14.3174 1.2746 +v 12.4902 12.5857 0.6294 +v 8.2110 8.3065 0.1731 +v 18.4052 8.0672 1.2746 +v 16.1551 7.1098 0.6294 +v 10.5953 4.7442 0.1731 +v -27.7004 -1.9255 27.6095 +v -27.5135 0.3405 27.1448 +v -21.2401 0.3405 27.1920 +v -21.0303 -1.9255 27.6641 +v -32.5963 -1.9255 27.2274 +v -32.1504 0.3405 26.8143 +v -35.6117 -1.9255 26.1903 +v -35.0249 0.3405 25.9174 +v -36.6405 -1.9255 24.1707 +v -36.0110 0.3405 24.1707 +v -28.1115 -2.6809 28.6318 +v -20.5687 -2.6809 28.7027 +v -33.5772 -2.6809 28.1362 +v -36.9027 -2.6809 26.7907 +v -38.0252 -2.6809 24.1707 +v -28.5226 -1.9255 29.6542 +v -20.1071 -1.9255 29.7412 +v -34.5581 -1.9255 29.0449 +v -38.1938 -1.9255 27.3911 +v -39.4100 -1.9255 24.1707 +v -28.7095 0.3405 30.1189 +v -19.8973 0.3405 30.2133 +v -35.0039 0.3405 29.4580 +v -38.7806 0.3405 27.6641 +v -40.0395 0.3405 24.1707 +v -28.5226 2.6065 29.6542 +v -20.1071 2.6065 29.7412 +v -34.5581 2.6065 29.0449 +v -38.1938 2.6065 27.3911 +v -39.4100 2.6065 24.1707 +v -28.1115 3.3618 28.6318 +v -20.5687 3.3618 28.7027 +v -33.5772 3.3618 28.1362 +v -36.9027 3.3618 26.7907 +v -38.0253 3.3618 24.1707 +v -27.7004 2.6065 27.6095 +v -21.0303 2.6065 27.6641 +v -32.5963 2.6065 27.2274 +v -35.6117 2.6065 26.1903 +v -36.6405 2.6065 24.1707 +v -36.0586 -1.9255 21.1683 +v -35.4865 0.3405 21.4326 +v -34.2355 -1.9255 17.7248 +v -33.8290 0.3405 18.1280 +v -31.0551 -1.9255 14.3255 +v -30.9125 0.3405 14.8234 +v -26.4015 -1.9255 11.4559 +v -37.3171 -2.6809 20.5868 +v -35.1298 -2.6809 16.8376 +v -31.3689 -2.6809 13.2301 +v -25.9399 -2.6809 10.0711 +v -38.5757 -1.9255 20.0053 +v -36.0241 -1.9255 15.9505 +v -31.6826 -1.9255 12.1347 +v -25.4783 -1.9255 8.6863 +v -39.1478 0.3405 19.7409 +v -36.4307 0.3405 15.5473 +v -31.8252 0.3405 11.6368 +v -25.2685 0.3405 8.0569 +v -38.5757 2.6065 20.0053 +v -36.0241 2.6065 15.9505 +v -31.6826 2.6065 12.1347 +v -25.4783 2.6065 8.6863 +v -37.3171 3.3618 20.5868 +v -35.1298 3.3618 16.8376 +v -31.3689 3.3618 13.2301 +v -25.9399 3.3618 10.0711 +v -36.0586 2.6065 21.1683 +v -34.2355 2.6065 17.7248 +v -31.0551 2.6065 14.3255 +v -26.4015 2.6065 11.4559 +v 30.0058 -4.1609 19.3308 +v 29.5141 0.3405 20.6143 +v 23.0728 0.3405 19.1351 +v 23.0728 -4.6447 17.4041 +v 32.9341 -3.0963 23.4232 +v 32.3046 0.3405 24.1707 +v 34.6034 -2.0318 28.2119 +v 33.8363 0.3405 28.4823 +v 37.7598 -1.5479 32.2275 +v 36.5009 0.3405 32.2275 +v 31.0877 -5.6613 16.5072 +v 23.0728 -6.3065 13.5960 +v 34.3189 -4.2419 21.7788 +v 36.2911 -2.8225 27.6169 +v 40.5294 -2.1773 32.2275 +v 32.1696 -4.1609 13.6835 +v 23.0728 -4.6447 9.7879 +v 35.7036 -3.0963 20.1343 +v 37.9788 -2.0318 27.0218 +v 43.2989 -1.5479 32.2275 +v 32.6613 0.3405 12.4001 +v 23.0728 0.3405 8.0569 +v 36.3331 0.3405 19.3869 +v 38.7459 0.3405 26.7514 +v 44.5578 0.3405 32.2275 +v 32.1696 4.8418 13.6835 +v 23.0728 5.3257 9.7879 +v 35.7036 3.7772 20.1343 +v 37.9788 2.7127 27.0218 +v 43.2989 2.2288 32.2275 +v 31.0877 6.3422 16.5072 +v 23.0728 6.9874 13.5960 +v 34.3189 4.9228 21.7788 +v 36.2911 3.5034 27.6169 +v 40.5294 2.8582 32.2275 +v 30.0058 4.8418 19.3308 +v 23.0728 5.3257 17.4041 +v 32.9341 3.7772 23.4232 +v 34.6034 2.7127 28.2119 +v 37.7598 2.2288 32.2275 +v 38.8143 -1.4299 32.8217 +v 37.4661 0.3405 32.7940 +v 39.4449 -1.1702 33.0271 +v 38.1794 0.3405 32.9829 +v 39.4637 -0.9106 32.8328 +v 38.3893 0.3405 32.7940 +v 38.6830 -0.7925 32.2275 +v 37.8437 0.3405 32.2275 +v 41.7804 -2.0200 32.8826 +v 42.2289 -1.6738 33.1245 +v 41.8276 -1.3276 32.9180 +v 40.5294 -1.1702 32.2275 +v 44.7465 -1.4299 32.9434 +v 45.0129 -1.1702 33.2219 +v 44.1915 -0.9106 33.0032 +v 42.3757 -0.7925 32.2275 +v 46.0947 0.3405 32.9711 +v 46.2783 0.3405 33.2661 +v 45.2659 0.3405 33.0419 +v 43.2150 0.3405 32.2275 +v 44.7465 2.1108 32.9434 +v 45.0129 1.8511 33.2219 +v 44.1915 1.5915 33.0032 +v 42.3757 1.4735 32.2275 +v 41.7804 2.7009 32.8826 +v 42.2289 2.3547 33.1245 +v 41.8276 2.0085 32.9180 +v 40.5294 1.8511 32.2275 +v 38.8143 2.1108 32.8217 +v 39.4449 1.8511 33.0271 +v 39.4637 1.5915 32.8328 +v 38.6830 1.4735 32.2275 +v 4.4660 -1.4596 41.6377 +v 4.8189 0.3405 41.6377 +v 0.2449 0.3405 42.2986 +v 4.2723 -1.3767 40.0326 +v 4.6091 0.3405 40.0326 +v 2.6843 -0.6988 38.0499 +v 2.8886 0.3405 38.0499 +v 2.7224 -0.7137 36.2560 +v 2.9306 0.3405 36.2560 +v 3.4967 -2.9113 41.6377 +v 3.3473 -2.7619 40.0326 +v 2.1234 -1.5380 38.0499 +v 2.1517 -1.5663 36.2560 +v 2.0450 -3.8806 41.6377 +v 1.9621 -3.6869 40.0326 +v 1.2842 -2.0989 38.0499 +v 1.2991 -2.1370 36.2560 +v 0.2449 -4.2335 41.6377 +v 0.2449 -4.0237 40.0326 +v 0.2449 -2.3032 38.0499 +v 0.2449 -2.3452 36.2560 +v -1.5551 -3.8806 41.6377 +v -1.4722 -3.6869 40.0326 +v -0.7943 -2.0989 38.0499 +v -0.8092 -2.1370 36.2560 +v -3.0068 -2.9113 41.6377 +v -2.8574 -2.7619 40.0326 +v -1.6335 -1.5380 38.0499 +v -1.6618 -1.5663 36.2560 +v -3.9761 -1.4596 41.6377 +v -3.7824 -1.3767 40.0326 +v -2.1944 -0.6988 38.0499 +v -2.2325 -0.7137 36.2560 +v -4.3290 0.3405 41.6377 +v -4.1192 0.3405 40.0326 +v -2.3987 0.3405 38.0499 +v -2.4407 0.3405 36.2560 +v -3.9761 2.1405 41.6377 +v -3.7824 2.0576 40.0326 +v -2.1944 1.3797 38.0499 +v -2.2325 1.3946 36.2560 +v -3.0068 3.5922 41.6377 +v -2.8574 3.4428 40.0326 +v -1.6335 2.2189 38.0499 +v -1.6618 2.2473 36.2560 +v -1.5551 4.5615 41.6377 +v -1.4722 4.3678 40.0326 +v -0.7943 2.7798 38.0499 +v -0.8092 2.8179 36.2560 +v 0.2449 4.9144 41.6377 +v 0.2449 4.7046 40.0326 +v 0.2449 2.9841 38.0499 +v 0.2449 3.0261 36.2560 +v 2.0450 4.5615 41.6377 +v 1.9621 4.3678 40.0326 +v 1.2842 2.7798 38.0499 +v 1.2991 2.8179 36.2560 +v 3.4967 3.5922 41.6377 +v 3.3473 3.4428 40.0326 +v 2.1234 2.2189 38.0499 +v 2.1517 2.2473 36.2560 +v 4.4660 2.1405 41.6377 +v 4.2723 2.0576 40.0326 +v 2.6843 1.3797 38.0499 +v 2.7224 1.3946 36.2560 +v 5.8967 -2.0642 35.0600 +v 6.3715 0.3405 35.0600 +v 10.4646 -4.0077 34.2418 +v 11.3232 0.3405 34.2418 +v 14.5679 -5.7536 33.4235 +v 15.7712 0.3405 33.4235 +v 16.3486 -6.5113 32.2275 +v 17.7015 0.3405 32.2275 +v 4.5948 -4.0094 35.0600 +v 8.1105 -7.5251 34.2418 +v 11.2686 -10.6832 33.4235 +v 12.6391 -12.0537 32.2275 +v 2.6496 -5.3113 35.0600 +v 4.5931 -9.8792 34.2418 +v 6.3390 -13.9825 33.4235 +v 7.0967 -15.7632 32.2275 +v 0.2449 -5.7861 35.0600 +v 0.2449 -10.7378 34.2418 +v 0.2449 -15.1858 33.4235 +v 0.2449 -17.1161 32.2275 +v -2.1597 -5.3113 35.0600 +v -4.1033 -9.8792 34.2418 +v -5.8491 -13.9825 33.4235 +v -6.6068 -15.7632 32.2275 +v -4.1049 -4.0094 35.0600 +v -7.6206 -7.5251 34.2418 +v -10.7787 -10.6832 33.4235 +v -12.1492 -12.0537 32.2275 +v -5.4068 -2.0642 35.0600 +v -9.9747 -4.0077 34.2418 +v -14.0781 -5.7536 33.4235 +v -15.8587 -6.5113 32.2275 +v -5.8816 0.3405 35.0600 +v -10.8333 0.3405 34.2418 +v -15.2813 0.3405 33.4235 +v -17.2116 0.3405 32.2275 +v -5.4068 2.7451 35.0600 +v -9.9747 4.6887 34.2418 +v -14.0781 6.4345 33.4235 +v -15.8587 7.1922 32.2275 +v -4.1049 4.6903 35.0600 +v -7.6206 8.2060 34.2418 +v -10.7787 11.3641 33.4235 +v -12.1492 12.7346 32.2275 +v -2.1597 5.9922 35.0600 +v -4.1033 10.5601 34.2418 +v -5.8491 14.6635 33.4235 +v -6.6068 16.4442 32.2275 +v 0.2449 6.4670 35.0600 +v 0.2449 11.4187 34.2418 +v 0.2449 15.8667 33.4235 +v 0.2449 17.7970 32.2275 +v 2.6496 5.9922 35.0600 +v 4.5931 10.5601 34.2418 +v 6.3390 14.6635 33.4235 +v 7.0967 16.4442 32.2275 +v 4.5948 4.6903 35.0600 +v 8.1105 8.2060 34.2418 +v 11.2686 11.3641 33.4235 +v 12.6391 12.7346 32.2275 +v 5.8967 2.7451 35.0600 +v 10.4646 4.6887 34.2418 +v 14.5679 6.4345 33.4235 +v 16.3486 7.1922 32.2275 +# 529 vertices + +vn -0.8934 0.3691 0.2560 +vn -0.9668 0.0000 0.2554 +vn -0.9667 0.0000 -0.2558 +vn -0.8930 0.3699 -0.2563 +vn -0.0839 0.0355 0.9958 +vn -0.0921 0.0000 0.9958 +vn 0.6297 -0.2604 0.7319 +vn 0.6820 -0.0000 0.7313 +vn 0.8037 -0.3326 0.4934 +vn 0.8703 -0.0000 0.4925 +vn -0.6835 0.6835 0.2561 +vn -0.6834 0.6834 -0.2567 +vn -0.0649 0.0649 0.9958 +vn 0.4814 -0.4814 0.7325 +vn 0.6148 -0.6148 0.4940 +vn -0.3691 0.8934 0.2560 +vn -0.3699 0.8930 -0.2563 +vn -0.0355 0.0839 0.9958 +vn 0.2604 -0.6297 0.7319 +vn 0.3326 -0.8037 0.4934 +vn -0.0019 0.9670 0.2547 +vn -0.0028 0.9662 -0.2579 +vn -0.0003 0.0923 0.9957 +vn 0.0000 -0.6821 0.7313 +vn -0.0000 -0.8703 0.4925 +vn 0.3771 0.9141 0.1491 +vn 0.3791 0.8528 -0.3593 +vn 0.0275 0.1226 0.9921 +vn -0.2610 -0.6354 0.7268 +vn -0.3325 -0.8043 0.4925 +vn 0.7127 0.6976 0.0737 +vn 0.6635 0.6253 -0.4108 +vn 0.0997 0.1220 0.9875 +vn -0.4873 -0.4886 0.7238 +vn -0.6152 -0.6155 0.4926 +vn 0.9173 0.3615 0.1671 +vn 0.8800 0.3387 -0.3329 +vn 0.1136 0.0481 0.9924 +vn -0.6341 -0.2619 0.7275 +vn -0.8041 -0.3327 0.4926 +vn 0.9674 -0.0081 0.2530 +vn 0.9667 -0.0105 -0.2557 +vn 0.0934 -0.0013 0.9956 +vn -0.6822 0.0003 0.7312 +vn -0.8703 0.0001 0.4925 +vn 0.8934 -0.3691 0.2560 +vn 0.8930 -0.3699 -0.2563 +vn 0.0839 -0.0355 0.9958 +vn -0.6297 0.2604 0.7319 +vn -0.8037 0.3326 0.4934 +vn 0.6835 -0.6835 0.2561 +vn 0.6834 -0.6834 -0.2567 +vn 0.0649 -0.0649 0.9958 +vn -0.4814 0.4814 0.7325 +vn -0.6148 0.6148 0.4940 +vn 0.3691 -0.8934 0.2560 +vn 0.3699 -0.8930 -0.2563 +vn 0.0355 -0.0839 0.9958 +vn -0.2604 0.6297 0.7319 +vn -0.3326 0.8037 0.4934 +vn -0.0000 -0.9668 0.2554 +vn -0.0000 -0.9667 -0.2558 +vn -0.0000 -0.0921 0.9958 +vn 0.0000 0.6820 0.7313 +vn 0.0000 0.8703 0.4925 +vn -0.3691 -0.8934 0.2560 +vn -0.3699 -0.8930 -0.2563 +vn -0.0355 -0.0839 0.9958 +vn 0.2604 0.6297 0.7319 +vn 0.3326 0.8037 0.4934 +vn -0.6835 -0.6835 0.2561 +vn -0.6834 -0.6834 -0.2567 +vn -0.0649 -0.0649 0.9958 +vn 0.4814 0.4814 0.7325 +vn 0.6148 0.6148 0.4940 +vn -0.8934 -0.3691 0.2560 +vn -0.8930 -0.3699 -0.2563 +vn -0.0839 -0.0355 0.9958 +vn 0.6297 0.2604 0.7319 +vn 0.8037 0.3326 0.4934 +vn 0.8454 -0.3498 0.4035 +vn 0.9153 -0.0000 0.4027 +vn 0.8700 -0.3600 0.3369 +vn 0.9418 -0.0000 0.3362 +vn 0.9042 -0.3743 0.2058 +vn 0.9787 -0.0000 0.2053 +vn 0.9219 -0.3818 -0.0664 +vn 0.9978 0.0000 -0.0662 +vn 0.6468 -0.6468 0.4041 +vn 0.6657 -0.6657 0.3374 +vn 0.6919 -0.6919 0.2061 +vn 0.7055 -0.7055 -0.0665 +vn 0.3498 -0.8454 0.4035 +vn 0.3600 -0.8700 0.3369 +vn 0.3743 -0.9042 0.2058 +vn 0.3818 -0.9219 -0.0664 +vn -0.0000 -0.9153 0.4027 +vn -0.0000 -0.9418 0.3362 +vn 0.0000 -0.9787 0.2053 +vn -0.0000 -0.9978 -0.0662 +vn -0.3498 -0.8454 0.4035 +vn -0.3600 -0.8700 0.3369 +vn -0.3743 -0.9042 0.2058 +vn -0.3818 -0.9219 -0.0664 +vn -0.6468 -0.6468 0.4041 +vn -0.6657 -0.6657 0.3374 +vn -0.6919 -0.6919 0.2061 +vn -0.7055 -0.7055 -0.0665 +vn -0.8454 -0.3498 0.4035 +vn -0.8700 -0.3600 0.3369 +vn -0.9042 -0.3743 0.2058 +vn -0.9219 -0.3818 -0.0664 +vn -0.9153 0.0000 0.4027 +vn -0.9418 0.0000 0.3362 +vn -0.9787 -0.0000 0.2053 +vn -0.9978 -0.0000 -0.0662 +vn -0.8454 0.3498 0.4035 +vn -0.8700 0.3600 0.3369 +vn -0.9042 0.3743 0.2058 +vn -0.9219 0.3818 -0.0664 +vn -0.6468 0.6468 0.4041 +vn -0.6657 0.6657 0.3374 +vn -0.6919 0.6919 0.2061 +vn -0.7055 0.7055 -0.0665 +vn -0.3498 0.8454 0.4035 +vn -0.3600 0.8700 0.3369 +vn -0.3743 0.9042 0.2058 +vn -0.3818 0.9219 -0.0664 +vn 0.0000 0.9153 0.4027 +vn 0.0000 0.9418 0.3362 +vn -0.0000 0.9787 0.2053 +vn 0.0000 0.9978 -0.0662 +vn 0.3498 0.8454 0.4035 +vn 0.3600 0.8700 0.3369 +vn 0.3743 0.9042 0.2058 +vn 0.3818 0.9219 -0.0664 +vn 0.6468 0.6468 0.4041 +vn 0.6657 0.6657 0.3374 +vn 0.6919 0.6919 0.2061 +vn 0.7055 0.7055 -0.0665 +vn 0.8454 0.3498 0.4035 +vn 0.8700 0.3600 0.3369 +vn 0.9042 0.3743 0.2058 +vn 0.9219 0.3818 -0.0664 +vn 0.8314 -0.3442 -0.4362 +vn 0.9002 0.0000 -0.4355 +vn 0.6735 -0.2786 -0.6847 +vn 0.7296 0.0000 -0.6839 +vn 0.6404 -0.2649 -0.7209 +vn 0.6940 -0.0000 -0.7200 +vn 0.7329 -0.3032 -0.6090 +vn 0.7939 -0.0000 -0.6080 +vn 0.6361 -0.6361 -0.4368 +vn 0.5150 -0.5150 -0.6853 +vn 0.4897 -0.4897 -0.7214 +vn 0.5606 -0.5606 -0.6096 +vn 0.3442 -0.8314 -0.4362 +vn 0.2786 -0.6735 -0.6847 +vn 0.2649 -0.6404 -0.7209 +vn 0.3032 -0.7329 -0.6090 +vn 0.0000 -0.9002 -0.4355 +vn 0.0000 -0.7296 -0.6839 +vn -0.0000 -0.6940 -0.7200 +vn -0.0000 -0.7939 -0.6080 +vn -0.3442 -0.8314 -0.4362 +vn -0.2786 -0.6735 -0.6847 +vn -0.2649 -0.6404 -0.7209 +vn -0.3032 -0.7329 -0.6090 +vn -0.6361 -0.6361 -0.4368 +vn -0.5150 -0.5150 -0.6853 +vn -0.4897 -0.4897 -0.7214 +vn -0.5606 -0.5606 -0.6096 +vn -0.8314 -0.3442 -0.4362 +vn -0.6735 -0.2786 -0.6847 +vn -0.6404 -0.2649 -0.7209 +vn -0.7329 -0.3032 -0.6090 +vn -0.9002 -0.0000 -0.4355 +vn -0.7296 -0.0000 -0.6839 +vn -0.6940 0.0000 -0.7200 +vn -0.7939 0.0000 -0.6080 +vn -0.8314 0.3442 -0.4362 +vn -0.6735 0.2786 -0.6847 +vn -0.6404 0.2649 -0.7209 +vn -0.7329 0.3032 -0.6090 +vn -0.6361 0.6361 -0.4368 +vn -0.5150 0.5150 -0.6853 +vn -0.4897 0.4897 -0.7214 +vn -0.5606 0.5606 -0.6096 +vn -0.3442 0.8314 -0.4362 +vn -0.2786 0.6735 -0.6847 +vn -0.2649 0.6404 -0.7209 +vn -0.3032 0.7329 -0.6090 +vn -0.0000 0.9002 -0.4355 +vn -0.0000 0.7296 -0.6839 +vn 0.0000 0.6940 -0.7200 +vn 0.0000 0.7939 -0.6080 +vn 0.3442 0.8314 -0.4362 +vn 0.2786 0.6735 -0.6847 +vn 0.2649 0.6404 -0.7209 +vn 0.3032 0.7329 -0.6090 +vn 0.6361 0.6361 -0.4368 +vn 0.5150 0.5150 -0.6853 +vn 0.4897 0.4897 -0.7214 +vn 0.5606 0.5606 -0.6096 +vn 0.8314 0.3442 -0.4362 +vn 0.6735 0.2786 -0.6847 +vn 0.6404 0.2649 -0.7209 +vn 0.7329 0.3032 -0.6090 +vn 0.5762 -0.2382 -0.7818 +vn 0.6239 0.0000 -0.7815 +vn 0.1636 -0.0675 -0.9842 +vn 0.1773 0.0000 -0.9842 +vn 0.0454 -0.0187 -0.9988 +vn 0.0492 0.0000 -0.9988 +vn 0.0000 0.0000 -1.0000 +vn 0.4404 -0.4404 -0.7823 +vn 0.1249 -0.1249 -0.9843 +vn 0.0347 -0.0347 -0.9988 +vn 0.2382 -0.5762 -0.7818 +vn 0.0675 -0.1636 -0.9842 +vn 0.0187 -0.0454 -0.9988 +vn 0.0000 -0.6239 -0.7815 +vn 0.0000 -0.1773 -0.9842 +vn 0.0000 -0.0492 -0.9988 +vn -0.2382 -0.5762 -0.7818 +vn -0.0675 -0.1636 -0.9842 +vn -0.0187 -0.0454 -0.9988 +vn -0.4404 -0.4404 -0.7823 +vn -0.1249 -0.1249 -0.9843 +vn -0.0347 -0.0347 -0.9988 +vn -0.5762 -0.2382 -0.7818 +vn -0.1636 -0.0675 -0.9842 +vn -0.0454 -0.0187 -0.9988 +vn -0.6239 -0.0000 -0.7815 +vn -0.1773 -0.0000 -0.9842 +vn -0.0492 -0.0000 -0.9988 +vn -0.5762 0.2382 -0.7818 +vn -0.1636 0.0675 -0.9842 +vn -0.0454 0.0187 -0.9988 +vn -0.4404 0.4404 -0.7823 +vn -0.1249 0.1249 -0.9843 +vn -0.0347 0.0347 -0.9988 +vn -0.2382 0.5762 -0.7818 +vn -0.0675 0.1636 -0.9842 +vn -0.0187 0.0454 -0.9988 +vn -0.0000 0.6239 -0.7815 +vn -0.0000 0.1773 -0.9842 +vn -0.0000 0.0492 -0.9988 +vn 0.2382 0.5762 -0.7818 +vn 0.0675 0.1636 -0.9842 +vn 0.0187 0.0454 -0.9988 +vn 0.4404 0.4404 -0.7823 +vn 0.1249 0.1249 -0.9843 +vn 0.0347 0.0347 -0.9988 +vn 0.5762 0.2382 -0.7818 +vn 0.1636 0.0675 -0.9842 +vn 0.0454 0.0187 -0.9988 +vn 0.0361 -0.5456 -0.8373 +vn 0.0391 0.0010 -0.9992 +vn 0.0078 0.0002 -1.0000 +vn 0.0070 -0.5829 -0.8125 +vn 0.1618 -0.5630 -0.8104 +vn 0.1795 0.0044 -0.9837 +vn 0.4824 -0.6427 -0.5951 +vn 0.6123 0.0105 -0.7906 +vn 0.7387 -0.6642 -0.1146 +vn 0.9862 0.0067 -0.1657 +vn 0.0028 -0.9998 0.0171 +vn -0.0019 -0.9868 0.1621 +vn 0.0105 -0.9972 0.0734 +vn -0.0660 -0.9893 0.1301 +vn -0.0944 -0.9954 0.0166 +vn -0.0486 -0.5395 0.8406 +vn -0.0092 -0.4903 0.8715 +vn -0.2233 -0.5527 0.8029 +vn -0.5964 -0.5751 0.5600 +vn -0.8033 -0.5916 0.0682 +vn -0.0588 -0.0007 0.9983 +vn -0.0106 -0.0001 0.9999 +vn -0.2807 -0.0033 0.9598 +vn -0.7497 -0.0043 0.6617 +vn -0.9974 -0.0021 0.0727 +vn -0.0465 0.5388 0.8412 +vn -0.0088 0.4903 0.8715 +vn -0.2179 0.5492 0.8068 +vn -0.5973 0.5741 0.5600 +vn -0.8040 0.5913 0.0629 +vn 0.0020 0.9999 0.0146 +vn -0.0018 0.9868 0.1617 +vn 0.0092 0.9982 0.0601 +vn -0.0593 0.9917 0.1139 +vn -0.0869 0.9961 0.0123 +vn 0.0338 0.5454 -0.8375 +vn 0.0064 0.5831 -0.8124 +vn 0.1571 0.5622 -0.8119 +vn 0.4844 0.6465 -0.5894 +vn 0.7389 0.6662 -0.1013 +vn 0.7256 -0.6374 0.2594 +vn 0.9465 0.0034 0.3227 +vn 0.6459 -0.6077 0.4620 +vn 0.8258 0.0075 0.5639 +vn 0.5316 -0.5586 0.6367 +vn 0.6500 0.0069 0.7599 +vn 0.4250 -0.5955 0.6817 +vn 0.5324 0.0052 0.8465 +vn -0.0496 -0.9986 -0.0198 +vn -0.0378 -0.9986 -0.0356 +vn -0.0379 -0.9986 -0.0365 +vn -0.1689 -0.9395 -0.2979 +vn -0.7423 -0.5995 -0.2992 +vn -0.6196 -0.5795 -0.5294 +vn -0.4837 -0.5438 -0.6858 +vn -0.4453 -0.4132 -0.7944 +vn -0.9265 -0.0020 -0.3763 +vn -0.7539 -0.0043 -0.6570 +vn -0.5662 -0.0035 -0.8242 +vn -0.4818 -0.0019 -0.8763 +vn -0.7447 0.5990 -0.2944 +vn -0.6219 0.5782 -0.5281 +vn -0.4812 0.5428 -0.6883 +vn -0.4381 0.4157 -0.7970 +vn -0.0443 0.9989 -0.0171 +vn -0.0262 0.9993 -0.0282 +vn -0.0253 0.9993 -0.0283 +vn -0.1575 0.9442 -0.2894 +vn 0.7282 0.6371 0.2524 +vn 0.6471 0.6083 0.4597 +vn 0.5230 0.5622 0.6407 +vn 0.4100 0.6047 0.6829 +vn -0.3167 -0.7021 0.6378 +vn -0.5489 0.0015 0.8359 +vn -0.2308 0.0065 0.9730 +vn -0.1529 -0.7102 0.6872 +vn -0.6011 -0.6453 0.4715 +vn -0.8757 -0.0099 0.4828 +vn -0.6359 -0.6298 0.4461 +vn -0.8776 -0.0191 0.4791 +vn -0.4357 -0.6700 0.6010 +vn -0.6962 -0.0245 0.7174 +vn 0.2233 -0.9747 0.0065 +vn 0.1111 -0.9902 -0.0851 +vn 0.1901 -0.9695 0.1550 +vn 0.0053 -0.9819 0.1895 +vn -0.0118 -0.9690 0.2467 +vn 0.5725 -0.5916 -0.5677 +vn 0.3439 -0.5994 -0.7228 +vn 0.7874 -0.5605 -0.2565 +vn 0.6471 -0.6981 -0.3064 +vn 0.4275 -0.7536 -0.4993 +vn 0.6715 0.0009 -0.7410 +vn 0.4109 -0.0013 -0.9117 +vn 0.9220 0.0073 -0.3871 +vn 0.8469 0.0139 -0.5316 +vn 0.5359 0.0105 -0.8442 +vn 0.5787 0.5918 -0.5611 +vn 0.3412 0.6009 -0.7228 +vn 0.7849 0.5665 -0.2510 +vn 0.6427 0.7040 -0.3023 +vn 0.4186 0.7581 -0.5000 +vn 0.2328 0.9724 0.0126 +vn 0.1158 0.9901 -0.0791 +vn 0.2067 0.9663 0.1536 +vn 0.0245 0.9866 0.1614 +vn 0.0034 0.9775 0.2111 +vn -0.3195 0.7051 0.6331 +vn -0.1349 0.7136 0.6875 +vn -0.6039 0.6499 0.4614 +vn -0.6318 0.6401 0.4372 +vn -0.4243 0.6667 0.6127 +vn -0.2599 -0.5525 0.7919 +vn -0.4258 -0.0108 0.9048 +vn 0.0095 0.0217 0.9997 +vn 0.0220 -0.0016 0.9998 +vn 0.4102 0.8491 0.3329 +vn 0.9996 -0.0116 0.0259 +vn 0.5415 0.6370 -0.5486 +vn 0.7096 -0.0097 -0.7046 +vn 0.0463 -0.8892 0.4552 +vn -0.0107 -0.1489 0.9888 +vn -0.0444 0.7291 0.6829 +vn 0.1228 0.9924 0.0092 +vn 0.4818 -0.8575 -0.1804 +vn 0.4553 -0.4999 0.7367 +vn -0.2205 0.3583 0.9072 +vn -0.2359 0.7158 0.6573 +vn 0.7281 0.0156 -0.6853 +vn 0.8887 0.0167 0.4581 +vn -0.2601 -0.0008 0.9656 +vn -0.3716 0.0044 0.9284 +vn 0.4802 0.8589 -0.1784 +vn 0.4881 0.4980 0.7168 +vn -0.2220 -0.3619 0.9054 +vn -0.2354 -0.7105 0.6632 +vn 0.0587 0.8972 0.4377 +vn 0.0013 0.1640 0.9865 +vn -0.0442 -0.7303 0.6817 +vn 0.1388 -0.9897 -0.0342 +vn -0.2589 0.5454 0.7972 +vn 0.0123 -0.0193 0.9997 +vn 0.3986 -0.8457 0.3549 +vn 0.5376 -0.6107 -0.5814 +vn 0.7626 -0.3148 0.5650 +vn 0.8245 -0.0000 0.5658 +vn -0.0000 -0.0000 1.0000 +vn 0.8480 -0.3500 -0.3980 +vn 0.9177 -0.0000 -0.3973 +vn 0.8641 -0.3564 -0.3553 +vn 0.9353 -0.0001 -0.3539 +vn 0.7210 -0.2979 0.6256 +vn 0.7807 -0.0001 0.6249 +vn 0.5834 -0.5833 0.5652 +vn 0.6485 -0.6484 -0.3987 +vn 0.6609 -0.6607 -0.3559 +vn 0.5519 -0.5518 0.6253 +vn 0.3148 -0.7626 0.5651 +vn 0.3500 -0.8480 -0.3980 +vn 0.3565 -0.8642 -0.3552 +vn 0.2980 -0.7211 0.6255 +vn -0.0000 -0.8245 0.5658 +vn -0.0000 -0.9177 -0.3973 +vn -0.0001 -0.9353 -0.3539 +vn -0.0001 -0.7807 0.6249 +vn -0.3148 -0.7626 0.5650 +vn -0.3500 -0.8480 -0.3980 +vn -0.3564 -0.8641 -0.3553 +vn -0.2979 -0.7210 0.6256 +vn -0.5833 -0.5834 0.5652 +vn -0.6484 -0.6485 -0.3987 +vn -0.6607 -0.6609 -0.3559 +vn -0.5518 -0.5519 0.6253 +vn -0.7626 -0.3148 0.5651 +vn -0.8480 -0.3500 -0.3980 +vn -0.8642 -0.3565 -0.3552 +vn -0.7211 -0.2980 0.6255 +vn -0.8245 0.0000 0.5658 +vn -0.9177 0.0000 -0.3973 +vn -0.9353 0.0001 -0.3539 +vn -0.7807 0.0001 0.6249 +vn -0.7626 0.3148 0.5650 +vn -0.8480 0.3500 -0.3980 +vn -0.8641 0.3564 -0.3553 +vn -0.7210 0.2979 0.6256 +vn -0.5834 0.5833 0.5652 +vn -0.6485 0.6484 -0.3987 +vn -0.6609 0.6607 -0.3559 +vn -0.5519 0.5518 0.6253 +vn -0.3148 0.7626 0.5651 +vn -0.3500 0.8480 -0.3980 +vn -0.3565 0.8642 -0.3552 +vn -0.2980 0.7211 0.6255 +vn 0.0000 0.8245 0.5658 +vn 0.0000 0.9177 -0.3973 +vn 0.0001 0.9353 -0.3539 +vn 0.0001 0.7807 0.6249 +vn 0.3148 0.7626 0.5650 +vn 0.3500 0.8480 -0.3980 +vn 0.3564 0.8641 -0.3553 +vn 0.2979 0.7210 0.6256 +vn 0.5833 0.5834 0.5652 +vn 0.6484 0.6485 -0.3987 +vn 0.6607 0.6609 -0.3559 +vn 0.5518 0.5519 0.6253 +vn 0.7626 0.3148 0.5651 +vn 0.8480 0.3500 -0.3980 +vn 0.8642 0.3565 -0.3552 +vn 0.7211 0.2980 0.6255 +vn 0.2180 -0.0902 0.9718 +vn 0.2366 -0.0000 0.9716 +vn 0.1596 -0.0660 0.9850 +vn 0.1731 -0.0000 0.9849 +vn 0.3505 -0.1447 0.9253 +vn 0.3797 -0.0000 0.9251 +vn 0.4856 -0.2015 0.8507 +vn 0.5267 -0.0000 0.8501 +vn 0.1666 -0.1666 0.9718 +vn 0.1219 -0.1219 0.9850 +vn 0.2677 -0.2677 0.9256 +vn 0.3713 -0.3713 0.8510 +vn 0.0902 -0.2180 0.9718 +vn 0.0660 -0.1596 0.9850 +vn 0.1447 -0.3505 0.9253 +vn 0.2015 -0.4856 0.8507 +vn -0.0000 -0.2366 0.9716 +vn -0.0000 -0.1731 0.9849 +vn -0.0000 -0.3797 0.9251 +vn -0.0000 -0.5267 0.8501 +vn -0.0902 -0.2180 0.9718 +vn -0.0660 -0.1596 0.9850 +vn -0.1447 -0.3505 0.9253 +vn -0.2015 -0.4856 0.8507 +vn -0.1666 -0.1666 0.9718 +vn -0.1219 -0.1219 0.9850 +vn -0.2677 -0.2677 0.9256 +vn -0.3713 -0.3713 0.8510 +vn -0.2180 -0.0902 0.9718 +vn -0.1596 -0.0660 0.9850 +vn -0.3505 -0.1447 0.9253 +vn -0.4856 -0.2015 0.8507 +vn -0.2366 0.0000 0.9716 +vn -0.1731 0.0000 0.9849 +vn -0.3797 0.0000 0.9251 +vn -0.5267 0.0000 0.8501 +vn -0.2180 0.0902 0.9718 +vn -0.1596 0.0660 0.9850 +vn -0.3505 0.1447 0.9253 +vn -0.4856 0.2015 0.8507 +vn -0.1666 0.1666 0.9718 +vn -0.1219 0.1219 0.9850 +vn -0.2677 0.2677 0.9256 +vn -0.3713 0.3713 0.8510 +vn -0.0902 0.2180 0.9718 +vn -0.0660 0.1596 0.9850 +vn -0.1447 0.3505 0.9253 +vn -0.2015 0.4856 0.8507 +vn 0.0000 0.2366 0.9716 +vn 0.0000 0.1731 0.9849 +vn 0.0000 0.3797 0.9251 +vn 0.0000 0.5267 0.8501 +vn 0.0902 0.2180 0.9718 +vn 0.0660 0.1596 0.9850 +vn 0.1447 0.3505 0.9253 +vn 0.2015 0.4856 0.8507 +vn 0.1666 0.1666 0.9718 +vn 0.1219 0.1219 0.9850 +vn 0.2677 0.2677 0.9256 +vn 0.3713 0.3713 0.8510 +vn 0.2180 0.0902 0.9718 +vn 0.1596 0.0660 0.9850 +vn 0.3505 0.1447 0.9253 +vn 0.4856 0.2015 0.8507 +# 530 vertex normals + +vt 1.7500 1.9750 0.0000 +vt 2.0000 1.9750 0.0000 +vt 2.0000 2.0000 0.0000 +vt 1.7500 2.0000 0.0000 +vt 1.7500 1.9500 0.0000 +vt 2.0000 1.9500 0.0000 +vt 1.7500 1.9250 0.0000 +vt 2.0000 1.9250 0.0000 +vt 1.7500 1.9000 0.0000 +vt 2.0000 1.9000 0.0000 +vt 1.5000 1.9750 0.0000 +vt 1.5000 2.0000 0.0000 +vt 1.5000 1.9500 0.0000 +vt 1.5000 1.9250 0.0000 +vt 1.5000 1.9000 0.0000 +vt 1.2500 1.9750 0.0000 +vt 1.2500 2.0000 0.0000 +vt 1.2500 1.9500 0.0000 +vt 1.2500 1.9250 0.0000 +vt 1.2500 1.9000 0.0000 +vt 1.0000 1.9750 0.0000 +vt 1.0000 2.0000 0.0000 +vt 1.0000 1.9500 0.0000 +vt 1.0000 1.9250 0.0000 +vt 1.0000 1.9000 0.0000 +vt 0.7500 1.9750 0.0000 +vt 0.7500 2.0000 0.0000 +vt 0.7500 1.9500 0.0000 +vt 0.7500 1.9250 0.0000 +vt 0.7500 1.9000 0.0000 +vt 0.5000 1.9750 0.0000 +vt 0.5000 2.0000 0.0000 +vt 0.5000 1.9500 0.0000 +vt 0.5000 1.9250 0.0000 +vt 0.5000 1.9000 0.0000 +vt 0.2500 1.9750 0.0000 +vt 0.2500 2.0000 0.0000 +vt 0.2500 1.9500 0.0000 +vt 0.2500 1.9250 0.0000 +vt 0.2500 1.9000 0.0000 +vt 0.0000 1.9750 0.0000 +vt 0.0000 2.0000 0.0000 +vt 0.0000 1.9500 0.0000 +vt 0.0000 1.9250 0.0000 +vt 0.0000 1.9000 0.0000 +vt 1.7500 1.6750 0.0000 +vt 2.0000 1.6750 0.0000 +vt 1.7500 1.4500 0.0000 +vt 2.0000 1.4500 0.0000 +vt 1.7500 1.2250 0.0000 +vt 2.0000 1.2250 0.0000 +vt 1.7500 1.0000 0.0000 +vt 2.0000 1.0000 0.0000 +vt 1.5000 1.6750 0.0000 +vt 1.5000 1.4500 0.0000 +vt 1.5000 1.2250 0.0000 +vt 1.5000 1.0000 0.0000 +vt 1.2500 1.6750 0.0000 +vt 1.2500 1.4500 0.0000 +vt 1.2500 1.2250 0.0000 +vt 1.2500 1.0000 0.0000 +vt 1.0000 1.6750 0.0000 +vt 1.0000 1.4500 0.0000 +vt 1.0000 1.2250 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.7500 1.6750 0.0000 +vt 0.7500 1.4500 0.0000 +vt 0.7500 1.2250 0.0000 +vt 0.7500 1.0000 0.0000 +vt 0.5000 1.6750 0.0000 +vt 0.5000 1.4500 0.0000 +vt 0.5000 1.2250 0.0000 +vt 0.5000 1.0000 0.0000 +vt 0.2500 1.6750 0.0000 +vt 0.2500 1.4500 0.0000 +vt 0.2500 1.2250 0.0000 +vt 0.2500 1.0000 0.0000 +vt 0.0000 1.6750 0.0000 +vt 0.0000 1.4500 0.0000 +vt 0.0000 1.2250 0.0000 +vt 0.0000 1.0000 0.0000 +vt 1.7500 0.8500 0.0000 +vt 2.0000 0.8500 0.0000 +vt 1.7500 0.7000 0.0000 +vt 2.0000 0.7000 0.0000 +vt 1.7500 0.5500 0.0000 +vt 2.0000 0.5500 0.0000 +vt 1.7500 0.4000 0.0000 +vt 2.0000 0.4000 0.0000 +vt 1.5000 0.8500 0.0000 +vt 1.5000 0.7000 0.0000 +vt 1.5000 0.5500 0.0000 +vt 1.5000 0.4000 0.0000 +vt 1.2500 0.8500 0.0000 +vt 1.2500 0.7000 0.0000 +vt 1.2500 0.5500 0.0000 +vt 1.2500 0.4000 0.0000 +vt 1.0000 0.8500 0.0000 +vt 1.0000 0.7000 0.0000 +vt 1.0000 0.5500 0.0000 +vt 1.0000 0.4000 0.0000 +vt 0.7500 0.8500 0.0000 +vt 0.7500 0.7000 0.0000 +vt 0.7500 0.5500 0.0000 +vt 0.7500 0.4000 0.0000 +vt 0.5000 0.8500 0.0000 +vt 0.5000 0.7000 0.0000 +vt 0.5000 0.5500 0.0000 +vt 0.5000 0.4000 0.0000 +vt 0.2500 0.8500 0.0000 +vt 0.2500 0.7000 0.0000 +vt 0.2500 0.5500 0.0000 +vt 0.2500 0.4000 0.0000 +vt 0.0000 0.8500 0.0000 +vt 0.0000 0.7000 0.0000 +vt 0.0000 0.5500 0.0000 +vt 0.0000 0.4000 0.0000 +vt 1.7500 0.3000 0.0000 +vt 2.0000 0.3000 0.0000 +vt 1.7500 0.2000 0.0000 +vt 2.0000 0.2000 0.0000 +vt 1.7500 0.1000 0.0000 +vt 2.0000 0.1000 0.0000 +vt 1.7500 0.0000 0.0000 +vt 1.5000 0.3000 0.0000 +vt 1.5000 0.2000 0.0000 +vt 1.5000 0.1000 0.0000 +vt 1.5000 0.0000 0.0000 +vt 1.2500 0.3000 0.0000 +vt 1.2500 0.2000 0.0000 +vt 1.2500 0.1000 0.0000 +vt 1.2500 0.0000 0.0000 +vt 1.0000 0.3000 0.0000 +vt 1.0000 0.2000 0.0000 +vt 1.0000 0.1000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 0.7500 0.3000 0.0000 +vt 0.7500 0.2000 0.0000 +vt 0.7500 0.1000 0.0000 +vt 0.7500 0.0000 0.0000 +vt 0.5000 0.3000 0.0000 +vt 0.5000 0.2000 0.0000 +vt 0.5000 0.1000 0.0000 +vt 0.5000 0.0000 0.0000 +vt 0.2500 0.3000 0.0000 +vt 0.2500 0.2000 0.0000 +vt 0.2500 0.1000 0.0000 +vt 0.2500 0.0000 0.0000 +vt 0.0000 0.3000 0.0000 +vt 0.0000 0.2000 0.0000 +vt 0.0000 0.1000 0.0000 +vt 0.0000 0.0000 0.0000 +vt 0.8750 0.8750 0.0000 +vt 1.0000 0.8750 0.0000 +vt 0.8750 1.0000 0.0000 +vt 0.8750 0.7500 0.0000 +vt 1.0000 0.7500 0.0000 +vt 0.8750 0.6250 0.0000 +vt 1.0000 0.6250 0.0000 +vt 0.8750 0.5000 0.0000 +vt 1.0000 0.5000 0.0000 +vt 0.7500 0.8750 0.0000 +vt 0.7500 0.7500 0.0000 +vt 0.7500 0.6250 0.0000 +vt 0.7500 0.5000 0.0000 +vt 0.6250 0.8750 0.0000 +vt 0.6250 1.0000 0.0000 +vt 0.6250 0.7500 0.0000 +vt 0.6250 0.6250 0.0000 +vt 0.6250 0.5000 0.0000 +vt 0.5000 0.8750 0.0000 +vt 0.5000 0.7500 0.0000 +vt 0.5000 0.6250 0.0000 +vt 0.5000 0.5000 0.0000 +vt 0.3750 0.8750 0.0000 +vt 0.3750 1.0000 0.0000 +vt 0.3750 0.7500 0.0000 +vt 0.3750 0.6250 0.0000 +vt 0.3750 0.5000 0.0000 +vt 0.2500 0.8750 0.0000 +vt 0.2500 0.7500 0.0000 +vt 0.2500 0.6250 0.0000 +vt 0.2500 0.5000 0.0000 +vt 0.1250 0.8750 0.0000 +vt 0.1250 1.0000 0.0000 +vt 0.1250 0.7500 0.0000 +vt 0.1250 0.6250 0.0000 +vt 0.1250 0.5000 0.0000 +vt 0.0000 0.8750 0.0000 +vt 0.0000 0.7500 0.0000 +vt 0.0000 0.6250 0.0000 +vt 0.0000 0.5000 0.0000 +vt 0.8750 0.3750 0.0000 +vt 1.0000 0.3750 0.0000 +vt 0.8750 0.2500 0.0000 +vt 1.0000 0.2500 0.0000 +vt 0.8750 0.1250 0.0000 +vt 1.0000 0.1250 0.0000 +vt 0.8750 0.0000 0.0000 +vt 0.7500 0.3750 0.0000 +vt 0.7500 0.2500 0.0000 +vt 0.7500 0.1250 0.0000 +vt 0.6250 0.3750 0.0000 +vt 0.6250 0.2500 0.0000 +vt 0.6250 0.1250 0.0000 +vt 0.6250 0.0000 0.0000 +vt 0.5000 0.3750 0.0000 +vt 0.5000 0.2500 0.0000 +vt 0.5000 0.1250 0.0000 +vt 0.3750 0.3750 0.0000 +vt 0.3750 0.2500 0.0000 +vt 0.3750 0.1250 0.0000 +vt 0.3750 0.0000 0.0000 +vt 0.2500 0.3750 0.0000 +vt 0.2500 0.2500 0.0000 +vt 0.2500 0.1250 0.0000 +vt 0.1250 0.3750 0.0000 +vt 0.1250 0.2500 0.0000 +vt 0.1250 0.1250 0.0000 +vt 0.1250 0.0000 0.0000 +vt 0.0000 0.3750 0.0000 +vt 0.0000 0.2500 0.0000 +vt 0.0000 0.1250 0.0000 +vt 0.6250 0.2250 0.0000 +vt 0.5000 0.2250 0.0000 +vt 0.6250 0.4500 0.0000 +vt 0.5000 0.4500 0.0000 +vt 0.6250 0.6750 0.0000 +vt 0.5000 0.6750 0.0000 +vt 0.6250 0.9000 0.0000 +vt 0.5000 0.9000 0.0000 +vt 0.7500 0.2250 0.0000 +vt 0.7500 0.4500 0.0000 +vt 0.7500 0.6750 0.0000 +vt 0.7500 0.9000 0.0000 +vt 0.8750 0.2250 0.0000 +vt 0.8750 0.4500 0.0000 +vt 0.8750 0.6750 0.0000 +vt 0.8750 0.9000 0.0000 +vt 1.0000 0.2250 0.0000 +vt 1.0000 0.4500 0.0000 +vt 1.0000 0.6750 0.0000 +vt 1.0000 0.9000 0.0000 +vt 0.1250 0.2250 0.0000 +vt 0.0000 0.2250 0.0000 +vt 0.1250 0.4500 0.0000 +vt 0.0000 0.4500 0.0000 +vt 0.1250 0.6750 0.0000 +vt 0.0000 0.6750 0.0000 +vt 0.1250 0.9000 0.0000 +vt 0.0000 0.9000 0.0000 +vt 0.2500 0.2250 0.0000 +vt 0.2500 0.4500 0.0000 +vt 0.2500 0.6750 0.0000 +vt 0.2500 0.9000 0.0000 +vt 0.3750 0.2250 0.0000 +vt 0.3750 0.4500 0.0000 +vt 0.3750 0.6750 0.0000 +vt 0.3750 0.9000 0.0000 +vt 0.6250 0.9250 0.0000 +vt 0.5000 0.9250 0.0000 +vt 0.6250 0.9500 0.0000 +vt 0.5000 0.9500 0.0000 +vt 0.6250 0.9750 0.0000 +vt 0.5000 0.9750 0.0000 +vt 0.7500 0.9250 0.0000 +vt 0.7500 0.9500 0.0000 +vt 0.7500 0.9750 0.0000 +vt 0.8750 0.9250 0.0000 +vt 0.8750 0.9500 0.0000 +vt 0.8750 0.9750 0.0000 +vt 1.0000 0.9250 0.0000 +vt 1.0000 0.9500 0.0000 +vt 1.0000 0.9750 0.0000 +vt 0.1250 0.9250 0.0000 +vt 0.0000 0.9250 0.0000 +vt 0.1250 0.9500 0.0000 +vt 0.0000 0.9500 0.0000 +vt 0.1250 0.9750 0.0000 +vt 0.0000 0.9750 0.0000 +vt 0.2500 0.9250 0.0000 +vt 0.2500 0.9500 0.0000 +vt 0.2500 0.9750 0.0000 +vt 0.3750 0.9250 0.0000 +vt 0.3750 0.9500 0.0000 +vt 0.3750 0.9750 0.0000 +# 286 texture coords + +g Teapot001 +s 1 +f 1/1/1 2/2/2 3/3/3 +f 3/3/3 4/4/4 1/1/1 +f 5/5/5 6/6/6 2/2/2 +f 2/2/2 1/1/1 5/5/5 +f 7/7/7 8/8/8 6/6/6 +f 6/6/6 5/5/5 7/7/7 +f 9/9/9 10/10/10 8/8/8 +f 8/8/8 7/7/7 9/9/9 +f 11/11/11 1/1/1 4/4/4 +f 4/4/4 12/12/12 11/11/11 +f 13/13/13 5/5/5 1/1/1 +f 1/1/1 11/11/11 13/13/13 +f 14/14/14 7/7/7 5/5/5 +f 5/5/5 13/13/13 14/14/14 +f 15/15/15 9/9/9 7/7/7 +f 7/7/7 14/14/14 15/15/15 +f 16/16/16 11/11/11 12/12/12 +f 12/12/12 17/17/17 16/16/16 +f 18/18/18 13/13/13 11/11/11 +f 11/11/11 16/16/16 18/18/18 +f 19/19/19 14/14/14 13/13/13 +f 13/13/13 18/18/18 19/19/19 +f 20/20/20 15/15/15 14/14/14 +f 14/14/14 19/19/19 20/20/20 +f 21/21/21 16/16/16 17/17/17 +f 17/17/17 22/22/22 21/21/21 +f 23/23/23 18/18/18 16/16/16 +f 16/16/16 21/21/21 23/23/23 +f 24/24/24 19/19/19 18/18/18 +f 18/18/18 23/23/23 24/24/24 +f 25/25/25 20/20/20 19/19/19 +f 19/19/19 24/24/24 25/25/25 +f 26/26/26 21/21/21 22/22/22 +f 22/22/22 27/27/27 26/26/26 +f 28/28/28 23/23/23 21/21/21 +f 21/21/21 26/26/26 28/28/28 +f 29/29/29 24/24/24 23/23/23 +f 23/23/23 28/28/28 29/29/29 +f 30/30/30 25/25/25 24/24/24 +f 24/24/24 29/29/29 30/30/30 +f 31/31/31 26/26/26 27/27/27 +f 27/27/27 32/32/32 31/31/31 +f 33/33/33 28/28/28 26/26/26 +f 26/26/26 31/31/31 33/33/33 +f 34/34/34 29/29/29 28/28/28 +f 28/28/28 33/33/33 34/34/34 +f 35/35/35 30/30/30 29/29/29 +f 29/29/29 34/34/34 35/35/35 +f 36/36/36 31/31/31 32/32/32 +f 32/32/32 37/37/37 36/36/36 +f 38/38/38 33/33/33 31/31/31 +f 31/31/31 36/36/36 38/38/38 +f 39/39/39 34/34/34 33/33/33 +f 33/33/33 38/38/38 39/39/39 +f 40/40/40 35/35/35 34/34/34 +f 34/34/34 39/39/39 40/40/40 +f 41/41/41 36/36/36 37/37/37 +f 37/37/37 42/42/42 41/41/41 +f 43/43/43 38/38/38 36/36/36 +f 36/36/36 41/41/41 43/43/43 +f 44/44/44 39/39/39 38/38/38 +f 38/38/38 43/43/43 44/44/44 +f 45/45/45 40/40/40 39/39/39 +f 39/39/39 44/44/44 45/45/45 +f 46/1/46 41/2/41 42/3/42 +f 42/3/42 47/4/47 46/1/46 +f 48/5/48 43/6/43 41/2/41 +f 41/2/41 46/1/46 48/5/48 +f 49/7/49 44/8/44 43/6/43 +f 43/6/43 48/5/48 49/7/49 +f 50/9/50 45/10/45 44/8/44 +f 44/8/44 49/7/49 50/9/50 +f 51/11/51 46/1/46 47/4/47 +f 47/4/47 52/12/52 51/11/51 +f 53/13/53 48/5/48 46/1/46 +f 46/1/46 51/11/51 53/13/53 +f 54/14/54 49/7/49 48/5/48 +f 48/5/48 53/13/53 54/14/54 +f 55/15/55 50/9/50 49/7/49 +f 49/7/49 54/14/54 55/15/55 +f 56/16/56 51/11/51 52/12/52 +f 52/12/52 57/17/57 56/16/56 +f 58/18/58 53/13/53 51/11/51 +f 51/11/51 56/16/56 58/18/58 +f 59/19/59 54/14/54 53/13/53 +f 53/13/53 58/18/58 59/19/59 +f 60/20/60 55/15/55 54/14/54 +f 54/14/54 59/19/59 60/20/60 +f 61/21/61 56/16/56 57/17/57 +f 57/17/57 62/22/62 61/21/61 +f 63/23/63 58/18/58 56/16/56 +f 56/16/56 61/21/61 63/23/63 +f 64/24/64 59/19/59 58/18/58 +f 58/18/58 63/23/63 64/24/64 +f 65/25/65 60/20/60 59/19/59 +f 59/19/59 64/24/64 65/25/65 +f 66/26/66 61/21/61 62/22/62 +f 62/22/62 67/27/67 66/26/66 +f 68/28/68 63/23/63 61/21/61 +f 61/21/61 66/26/66 68/28/68 +f 69/29/69 64/24/64 63/23/63 +f 63/23/63 68/28/68 69/29/69 +f 70/30/70 65/25/65 64/24/64 +f 64/24/64 69/29/69 70/30/70 +f 71/31/71 66/26/66 67/27/67 +f 67/27/67 72/32/72 71/31/71 +f 73/33/73 68/28/68 66/26/66 +f 66/26/66 71/31/71 73/33/73 +f 74/34/74 69/29/69 68/28/68 +f 68/28/68 73/33/73 74/34/74 +f 75/35/75 70/30/70 69/29/69 +f 69/29/69 74/34/74 75/35/75 +f 76/36/76 71/31/71 72/32/72 +f 72/32/72 77/37/77 76/36/76 +f 78/38/78 73/33/73 71/31/71 +f 71/31/71 76/36/76 78/38/78 +f 79/39/79 74/34/74 73/33/73 +f 73/33/73 78/38/78 79/39/79 +f 80/40/80 75/35/75 74/34/74 +f 74/34/74 79/39/79 80/40/80 +f 2/41/2 76/36/76 77/37/77 +f 77/37/77 3/42/3 2/41/2 +f 6/43/6 78/38/78 76/36/76 +f 76/36/76 2/41/2 6/43/6 +f 8/44/8 79/39/79 78/38/78 +f 78/38/78 6/43/6 8/44/8 +f 10/45/10 80/40/80 79/39/79 +f 79/39/79 8/44/8 10/45/10 +f 81/46/81 82/47/82 10/10/10 +f 10/10/10 9/9/9 81/46/81 +f 83/48/83 84/49/84 82/47/82 +f 82/47/82 81/46/81 83/48/83 +f 85/50/85 86/51/86 84/49/84 +f 84/49/84 83/48/83 85/50/85 +f 87/52/87 88/53/88 86/51/86 +f 86/51/86 85/50/85 87/52/87 +f 89/54/89 81/46/81 9/9/9 +f 9/9/9 15/15/15 89/54/89 +f 90/55/90 83/48/83 81/46/81 +f 81/46/81 89/54/89 90/55/90 +f 91/56/91 85/50/85 83/48/83 +f 83/48/83 90/55/90 91/56/91 +f 92/57/92 87/52/87 85/50/85 +f 85/50/85 91/56/91 92/57/92 +f 93/58/93 89/54/89 15/15/15 +f 15/15/15 20/20/20 93/58/93 +f 94/59/94 90/55/90 89/54/89 +f 89/54/89 93/58/93 94/59/94 +f 95/60/95 91/56/91 90/55/90 +f 90/55/90 94/59/94 95/60/95 +f 96/61/96 92/57/92 91/56/91 +f 91/56/91 95/60/95 96/61/96 +f 97/62/97 93/58/93 20/20/20 +f 20/20/20 25/25/25 97/62/97 +f 98/63/98 94/59/94 93/58/93 +f 93/58/93 97/62/97 98/63/98 +f 99/64/99 95/60/95 94/59/94 +f 94/59/94 98/63/98 99/64/99 +f 100/65/100 96/61/96 95/60/95 +f 95/60/95 99/64/99 100/65/100 +f 101/66/101 97/62/97 25/25/25 +f 25/25/25 30/30/30 101/66/101 +f 102/67/102 98/63/98 97/62/97 +f 97/62/97 101/66/101 102/67/102 +f 103/68/103 99/64/99 98/63/98 +f 98/63/98 102/67/102 103/68/103 +f 104/69/104 100/65/100 99/64/99 +f 99/64/99 103/68/103 104/69/104 +f 105/70/105 101/66/101 30/30/30 +f 30/30/30 35/35/35 105/70/105 +f 106/71/106 102/67/102 101/66/101 +f 101/66/101 105/70/105 106/71/106 +f 107/72/107 103/68/103 102/67/102 +f 102/67/102 106/71/106 107/72/107 +f 108/73/108 104/69/104 103/68/103 +f 103/68/103 107/72/107 108/73/108 +f 109/74/109 105/70/105 35/35/35 +f 35/35/35 40/40/40 109/74/109 +f 110/75/110 106/71/106 105/70/105 +f 105/70/105 109/74/109 110/75/110 +f 111/76/111 107/72/107 106/71/106 +f 106/71/106 110/75/110 111/76/111 +f 112/77/112 108/73/108 107/72/107 +f 107/72/107 111/76/111 112/77/112 +f 113/78/113 109/74/109 40/40/40 +f 40/40/40 45/45/45 113/78/113 +f 114/79/114 110/75/110 109/74/109 +f 109/74/109 113/78/113 114/79/114 +f 115/80/115 111/76/111 110/75/110 +f 110/75/110 114/79/114 115/80/115 +f 116/81/116 112/77/112 111/76/111 +f 111/76/111 115/80/115 116/81/116 +f 117/46/117 113/47/113 45/10/45 +f 45/10/45 50/9/50 117/46/117 +f 118/48/118 114/49/114 113/47/113 +f 113/47/113 117/46/117 118/48/118 +f 119/50/119 115/51/115 114/49/114 +f 114/49/114 118/48/118 119/50/119 +f 120/52/120 116/53/116 115/51/115 +f 115/51/115 119/50/119 120/52/120 +f 121/54/121 117/46/117 50/9/50 +f 50/9/50 55/15/55 121/54/121 +f 122/55/122 118/48/118 117/46/117 +f 117/46/117 121/54/121 122/55/122 +f 123/56/123 119/50/119 118/48/118 +f 118/48/118 122/55/122 123/56/123 +f 124/57/124 120/52/120 119/50/119 +f 119/50/119 123/56/123 124/57/124 +f 125/58/125 121/54/121 55/15/55 +f 55/15/55 60/20/60 125/58/125 +f 126/59/126 122/55/122 121/54/121 +f 121/54/121 125/58/125 126/59/126 +f 127/60/127 123/56/123 122/55/122 +f 122/55/122 126/59/126 127/60/127 +f 128/61/128 124/57/124 123/56/123 +f 123/56/123 127/60/127 128/61/128 +f 129/62/129 125/58/125 60/20/60 +f 60/20/60 65/25/65 129/62/129 +f 130/63/130 126/59/126 125/58/125 +f 125/58/125 129/62/129 130/63/130 +f 131/64/131 127/60/127 126/59/126 +f 126/59/126 130/63/130 131/64/131 +f 132/65/132 128/61/128 127/60/127 +f 127/60/127 131/64/131 132/65/132 +f 133/66/133 129/62/129 65/25/65 +f 65/25/65 70/30/70 133/66/133 +f 134/67/134 130/63/130 129/62/129 +f 129/62/129 133/66/133 134/67/134 +f 135/68/135 131/64/131 130/63/130 +f 130/63/130 134/67/134 135/68/135 +f 136/69/136 132/65/132 131/64/131 +f 131/64/131 135/68/135 136/69/136 +f 137/70/137 133/66/133 70/30/70 +f 70/30/70 75/35/75 137/70/137 +f 138/71/138 134/67/134 133/66/133 +f 133/66/133 137/70/137 138/71/138 +f 139/72/139 135/68/135 134/67/134 +f 134/67/134 138/71/138 139/72/139 +f 140/73/140 136/69/136 135/68/135 +f 135/68/135 139/72/139 140/73/140 +f 141/74/141 137/70/137 75/35/75 +f 75/35/75 80/40/80 141/74/141 +f 142/75/142 138/71/138 137/70/137 +f 137/70/137 141/74/141 142/75/142 +f 143/76/143 139/72/139 138/71/138 +f 138/71/138 142/75/142 143/76/143 +f 144/77/144 140/73/140 139/72/139 +f 139/72/139 143/76/143 144/77/144 +f 82/78/82 141/74/141 80/40/80 +f 80/40/80 10/45/10 82/78/82 +f 84/79/84 142/75/142 141/74/141 +f 141/74/141 82/78/82 84/79/84 +f 86/80/86 143/76/143 142/75/142 +f 142/75/142 84/79/84 86/80/86 +f 88/81/88 144/77/144 143/76/143 +f 143/76/143 86/80/86 88/81/88 +f 145/82/145 146/83/146 88/53/88 +f 88/53/88 87/52/87 145/82/145 +f 147/84/147 148/85/148 146/83/146 +f 146/83/146 145/82/145 147/84/147 +f 149/86/149 150/87/150 148/85/148 +f 148/85/148 147/84/147 149/86/149 +f 151/88/151 152/89/152 150/87/150 +f 150/87/150 149/86/149 151/88/151 +f 153/90/153 145/82/145 87/52/87 +f 87/52/87 92/57/92 153/90/153 +f 154/91/154 147/84/147 145/82/145 +f 145/82/145 153/90/153 154/91/154 +f 155/92/155 149/86/149 147/84/147 +f 147/84/147 154/91/154 155/92/155 +f 156/93/156 151/88/151 149/86/149 +f 149/86/149 155/92/155 156/93/156 +f 157/94/157 153/90/153 92/57/92 +f 92/57/92 96/61/96 157/94/157 +f 158/95/158 154/91/154 153/90/153 +f 153/90/153 157/94/157 158/95/158 +f 159/96/159 155/92/155 154/91/154 +f 154/91/154 158/95/158 159/96/159 +f 160/97/160 156/93/156 155/92/155 +f 155/92/155 159/96/159 160/97/160 +f 161/98/161 157/94/157 96/61/96 +f 96/61/96 100/65/100 161/98/161 +f 162/99/162 158/95/158 157/94/157 +f 157/94/157 161/98/161 162/99/162 +f 163/100/163 159/96/159 158/95/158 +f 158/95/158 162/99/162 163/100/163 +f 164/101/164 160/97/160 159/96/159 +f 159/96/159 163/100/163 164/101/164 +f 165/102/165 161/98/161 100/65/100 +f 100/65/100 104/69/104 165/102/165 +f 166/103/166 162/99/162 161/98/161 +f 161/98/161 165/102/165 166/103/166 +f 167/104/167 163/100/163 162/99/162 +f 162/99/162 166/103/166 167/104/167 +f 168/105/168 164/101/164 163/100/163 +f 163/100/163 167/104/167 168/105/168 +f 169/106/169 165/102/165 104/69/104 +f 104/69/104 108/73/108 169/106/169 +f 170/107/170 166/103/166 165/102/165 +f 165/102/165 169/106/169 170/107/170 +f 171/108/171 167/104/167 166/103/166 +f 166/103/166 170/107/170 171/108/171 +f 172/109/172 168/105/168 167/104/167 +f 167/104/167 171/108/171 172/109/172 +f 173/110/173 169/106/169 108/73/108 +f 108/73/108 112/77/112 173/110/173 +f 174/111/174 170/107/170 169/106/169 +f 169/106/169 173/110/173 174/111/174 +f 175/112/175 171/108/171 170/107/170 +f 170/107/170 174/111/174 175/112/175 +f 176/113/176 172/109/172 171/108/171 +f 171/108/171 175/112/175 176/113/176 +f 177/114/177 173/110/173 112/77/112 +f 112/77/112 116/81/116 177/114/177 +f 178/115/178 174/111/174 173/110/173 +f 173/110/173 177/114/177 178/115/178 +f 179/116/179 175/112/175 174/111/174 +f 174/111/174 178/115/178 179/116/179 +f 180/117/180 176/113/176 175/112/175 +f 175/112/175 179/116/179 180/117/180 +f 181/82/181 177/83/177 116/53/116 +f 116/53/116 120/52/120 181/82/181 +f 182/84/182 178/85/178 177/83/177 +f 177/83/177 181/82/181 182/84/182 +f 183/86/183 179/87/179 178/85/178 +f 178/85/178 182/84/182 183/86/183 +f 184/88/184 180/89/180 179/87/179 +f 179/87/179 183/86/183 184/88/184 +f 185/90/185 181/82/181 120/52/120 +f 120/52/120 124/57/124 185/90/185 +f 186/91/186 182/84/182 181/82/181 +f 181/82/181 185/90/185 186/91/186 +f 187/92/187 183/86/183 182/84/182 +f 182/84/182 186/91/186 187/92/187 +f 188/93/188 184/88/184 183/86/183 +f 183/86/183 187/92/187 188/93/188 +f 189/94/189 185/90/185 124/57/124 +f 124/57/124 128/61/128 189/94/189 +f 190/95/190 186/91/186 185/90/185 +f 185/90/185 189/94/189 190/95/190 +f 191/96/191 187/92/187 186/91/186 +f 186/91/186 190/95/190 191/96/191 +f 192/97/192 188/93/188 187/92/187 +f 187/92/187 191/96/191 192/97/192 +f 193/98/193 189/94/189 128/61/128 +f 128/61/128 132/65/132 193/98/193 +f 194/99/194 190/95/190 189/94/189 +f 189/94/189 193/98/193 194/99/194 +f 195/100/195 191/96/191 190/95/190 +f 190/95/190 194/99/194 195/100/195 +f 196/101/196 192/97/192 191/96/191 +f 191/96/191 195/100/195 196/101/196 +f 197/102/197 193/98/193 132/65/132 +f 132/65/132 136/69/136 197/102/197 +f 198/103/198 194/99/194 193/98/193 +f 193/98/193 197/102/197 198/103/198 +f 199/104/199 195/100/195 194/99/194 +f 194/99/194 198/103/198 199/104/199 +f 200/105/200 196/101/196 195/100/195 +f 195/100/195 199/104/199 200/105/200 +f 201/106/201 197/102/197 136/69/136 +f 136/69/136 140/73/140 201/106/201 +f 202/107/202 198/103/198 197/102/197 +f 197/102/197 201/106/201 202/107/202 +f 203/108/203 199/104/199 198/103/198 +f 198/103/198 202/107/202 203/108/203 +f 204/109/204 200/105/200 199/104/199 +f 199/104/199 203/108/203 204/109/204 +f 205/110/205 201/106/201 140/73/140 +f 140/73/140 144/77/144 205/110/205 +f 206/111/206 202/107/202 201/106/201 +f 201/106/201 205/110/205 206/111/206 +f 207/112/207 203/108/203 202/107/202 +f 202/107/202 206/111/206 207/112/207 +f 208/113/208 204/109/204 203/108/203 +f 203/108/203 207/112/207 208/113/208 +f 146/114/146 205/110/205 144/77/144 +f 144/77/144 88/81/88 146/114/146 +f 148/115/148 206/111/206 205/110/205 +f 205/110/205 146/114/146 148/115/148 +f 150/116/150 207/112/207 206/111/206 +f 206/111/206 148/115/148 150/116/150 +f 152/117/152 208/113/208 207/112/207 +f 207/112/207 150/116/150 152/117/152 +f 209/118/209 210/119/210 152/89/152 +f 152/89/152 151/88/151 209/118/209 +f 211/120/211 212/121/212 210/119/210 +f 210/119/210 209/118/209 211/120/211 +f 213/122/213 214/123/214 212/121/212 +f 212/121/212 211/120/211 213/122/213 +f 214/123/214 213/122/213 215/124/215 +f 216/125/216 209/118/209 151/88/151 +f 151/88/151 156/93/156 216/125/216 +f 217/126/217 211/120/211 209/118/209 +f 209/118/209 216/125/216 217/126/217 +f 218/127/218 213/122/213 211/120/211 +f 211/120/211 217/126/217 218/127/218 +f 213/122/213 218/127/218 215/128/215 +f 219/129/219 216/125/216 156/93/156 +f 156/93/156 160/97/160 219/129/219 +f 220/130/220 217/126/217 216/125/216 +f 216/125/216 219/129/219 220/130/220 +f 221/131/221 218/127/218 217/126/217 +f 217/126/217 220/130/220 221/131/221 +f 218/127/218 221/131/221 215/132/215 +f 222/133/222 219/129/219 160/97/160 +f 160/97/160 164/101/164 222/133/222 +f 223/134/223 220/130/220 219/129/219 +f 219/129/219 222/133/222 223/134/223 +f 224/135/224 221/131/221 220/130/220 +f 220/130/220 223/134/223 224/135/224 +f 221/131/221 224/135/224 215/136/215 +f 225/137/225 222/133/222 164/101/164 +f 164/101/164 168/105/168 225/137/225 +f 226/138/226 223/134/223 222/133/222 +f 222/133/222 225/137/225 226/138/226 +f 227/139/227 224/135/224 223/134/223 +f 223/134/223 226/138/226 227/139/227 +f 224/135/224 227/139/227 215/140/215 +f 228/141/228 225/137/225 168/105/168 +f 168/105/168 172/109/172 228/141/228 +f 229/142/229 226/138/226 225/137/225 +f 225/137/225 228/141/228 229/142/229 +f 230/143/230 227/139/227 226/138/226 +f 226/138/226 229/142/229 230/143/230 +f 227/139/227 230/143/230 215/144/215 +f 231/145/231 228/141/228 172/109/172 +f 172/109/172 176/113/176 231/145/231 +f 232/146/232 229/142/229 228/141/228 +f 228/141/228 231/145/231 232/146/232 +f 233/147/233 230/143/230 229/142/229 +f 229/142/229 232/146/232 233/147/233 +f 230/143/230 233/147/233 215/148/215 +f 234/149/234 231/145/231 176/113/176 +f 176/113/176 180/117/180 234/149/234 +f 235/150/235 232/146/232 231/145/231 +f 231/145/231 234/149/234 235/150/235 +f 236/151/236 233/147/233 232/146/232 +f 232/146/232 235/150/235 236/151/236 +f 233/147/233 236/151/236 215/152/215 +f 237/118/237 234/119/234 180/89/180 +f 180/89/180 184/88/184 237/118/237 +f 238/120/238 235/121/235 234/119/234 +f 234/119/234 237/118/237 238/120/238 +f 239/122/239 236/123/236 235/121/235 +f 235/121/235 238/120/238 239/122/239 +f 236/123/236 239/122/239 215/124/215 +f 240/125/240 237/118/237 184/88/184 +f 184/88/184 188/93/188 240/125/240 +f 241/126/241 238/120/238 237/118/237 +f 237/118/237 240/125/240 241/126/241 +f 242/127/242 239/122/239 238/120/238 +f 238/120/238 241/126/241 242/127/242 +f 239/122/239 242/127/242 215/128/215 +f 243/129/243 240/125/240 188/93/188 +f 188/93/188 192/97/192 243/129/243 +f 244/130/244 241/126/241 240/125/240 +f 240/125/240 243/129/243 244/130/244 +f 245/131/245 242/127/242 241/126/241 +f 241/126/241 244/130/244 245/131/245 +f 242/127/242 245/131/245 215/132/215 +f 246/133/246 243/129/243 192/97/192 +f 192/97/192 196/101/196 246/133/246 +f 247/134/247 244/130/244 243/129/243 +f 243/129/243 246/133/246 247/134/247 +f 248/135/248 245/131/245 244/130/244 +f 244/130/244 247/134/247 248/135/248 +f 245/131/245 248/135/248 215/136/215 +f 249/137/249 246/133/246 196/101/196 +f 196/101/196 200/105/200 249/137/249 +f 250/138/250 247/134/247 246/133/246 +f 246/133/246 249/137/249 250/138/250 +f 251/139/251 248/135/248 247/134/247 +f 247/134/247 250/138/250 251/139/251 +f 248/135/248 251/139/251 215/140/215 +f 252/141/252 249/137/249 200/105/200 +f 200/105/200 204/109/204 252/141/252 +f 253/142/253 250/138/250 249/137/249 +f 249/137/249 252/141/252 253/142/253 +f 254/143/254 251/139/251 250/138/250 +f 250/138/250 253/142/253 254/143/254 +f 251/139/251 254/143/254 215/144/215 +f 255/145/255 252/141/252 204/109/204 +f 204/109/204 208/113/208 255/145/255 +f 256/146/256 253/142/253 252/141/252 +f 252/141/252 255/145/255 256/146/256 +f 257/147/257 254/143/254 253/142/253 +f 253/142/253 256/146/256 257/147/257 +f 254/143/254 257/147/257 215/148/215 +f 210/149/210 255/145/255 208/113/208 +f 208/113/208 152/117/152 210/149/210 +f 212/150/212 256/146/256 255/145/255 +f 255/145/255 210/149/210 212/150/212 +f 214/151/214 257/147/257 256/146/256 +f 256/146/256 212/150/212 214/151/214 +f 257/147/257 214/151/214 215/152/215 +f 258/153/258 259/154/259 260/65/260 +f 260/65/260 261/155/261 258/153/258 +f 262/156/262 263/157/263 259/154/259 +f 259/154/259 258/153/258 262/156/262 +f 264/158/264 265/159/265 263/157/263 +f 263/157/263 262/156/262 264/158/264 +f 266/160/266 267/161/267 265/159/265 +f 265/159/265 264/158/264 266/160/266 +f 268/162/268 258/153/258 261/155/261 +f 261/155/261 269/69/269 268/162/268 +f 270/163/270 262/156/262 258/153/258 +f 258/153/258 268/162/268 270/163/270 +f 271/164/271 264/158/264 262/156/262 +f 262/156/262 270/163/270 271/164/271 +f 272/165/272 266/160/266 264/158/264 +f 264/158/264 271/164/271 272/165/272 +f 273/166/273 268/162/268 269/69/269 +f 269/69/269 274/167/274 273/166/273 +f 275/168/275 270/163/270 268/162/268 +f 268/162/268 273/166/273 275/168/275 +f 276/169/276 271/164/271 270/163/270 +f 270/163/270 275/168/275 276/169/276 +f 277/170/277 272/165/272 271/164/271 +f 271/164/271 276/169/276 277/170/277 +f 278/171/278 273/166/273 274/167/274 +f 274/167/274 279/73/279 278/171/278 +f 280/172/280 275/168/275 273/166/273 +f 273/166/273 278/171/278 280/172/280 +f 281/173/281 276/169/276 275/168/275 +f 275/168/275 280/172/280 281/173/281 +f 282/174/282 277/170/277 276/169/276 +f 276/169/276 281/173/281 282/174/282 +f 283/175/283 278/171/278 279/73/279 +f 279/73/279 284/176/284 283/175/283 +f 285/177/285 280/172/280 278/171/278 +f 278/171/278 283/175/283 285/177/285 +f 286/178/286 281/173/281 280/172/280 +f 280/172/280 285/177/285 286/178/286 +f 287/179/287 282/174/282 281/173/281 +f 281/173/281 286/178/286 287/179/287 +f 288/180/288 283/175/283 284/176/284 +f 284/176/284 289/77/289 288/180/288 +f 290/181/290 285/177/285 283/175/283 +f 283/175/283 288/180/288 290/181/290 +f 291/182/291 286/178/286 285/177/285 +f 285/177/285 290/181/290 291/182/291 +f 292/183/292 287/179/287 286/178/286 +f 286/178/286 291/182/291 292/183/292 +f 293/184/293 288/180/288 289/77/289 +f 289/77/289 294/185/294 293/184/293 +f 295/186/295 290/181/290 288/180/288 +f 288/180/288 293/184/293 295/186/295 +f 296/187/296 291/182/291 290/181/290 +f 290/181/290 295/186/295 296/187/296 +f 297/188/297 292/183/292 291/182/291 +f 291/182/291 296/187/296 297/188/297 +f 259/189/259 293/184/293 294/185/294 +f 294/185/294 260/81/260 259/189/259 +f 263/190/263 295/186/295 293/184/293 +f 293/184/293 259/189/259 263/190/263 +f 265/191/265 296/187/296 295/186/295 +f 295/186/295 263/190/263 265/191/265 +f 267/192/267 297/188/297 296/187/296 +f 296/187/296 265/191/265 267/192/267 +f 298/193/298 299/194/299 267/161/267 +f 267/161/267 266/160/266 298/193/298 +f 300/195/300 301/196/301 299/194/299 +f 299/194/299 298/193/298 300/195/300 +f 302/197/302 303/198/303 301/196/301 +f 301/196/301 300/195/300 302/197/302 +f 304/199/304 116/136/305 303/198/303 +f 303/198/303 302/197/302 304/199/304 +f 305/200/306 298/193/298 266/160/266 +f 266/160/266 272/165/272 305/200/306 +f 306/201/307 300/195/300 298/193/298 +f 298/193/298 305/200/306 306/201/307 +f 307/202/308 302/197/302 300/195/300 +f 300/195/300 306/201/307 307/202/308 +f 308/140/309 304/199/304 302/197/302 +f 302/197/302 307/202/308 308/140/309 +f 309/203/310 305/200/306 272/165/272 +f 272/165/272 277/170/277 309/203/310 +f 310/204/311 306/201/307 305/200/306 +f 305/200/306 309/203/310 310/204/311 +f 311/205/312 307/202/308 306/201/307 +f 306/201/307 310/204/311 311/205/312 +f 312/206/313 308/140/309 307/202/308 +f 307/202/308 311/205/312 312/206/313 +f 313/207/314 309/203/310 277/170/277 +f 277/170/277 282/174/282 313/207/314 +f 314/208/315 310/204/311 309/203/310 +f 309/203/310 313/207/314 314/208/315 +f 315/209/316 311/205/312 310/204/311 +f 310/204/311 314/208/315 315/209/316 +f 316/144/317 312/206/313 311/205/312 +f 311/205/312 315/209/316 316/144/317 +f 317/210/318 313/207/314 282/174/282 +f 282/174/282 287/179/287 317/210/318 +f 318/211/319 314/208/315 313/207/314 +f 313/207/314 317/210/318 318/211/319 +f 319/212/320 315/209/316 314/208/315 +f 314/208/315 318/211/319 319/212/320 +f 320/213/321 316/144/317 315/209/316 +f 315/209/316 319/212/320 320/213/321 +f 321/214/322 317/210/318 287/179/287 +f 287/179/287 292/183/292 321/214/322 +f 322/215/323 318/211/319 317/210/318 +f 317/210/318 321/214/322 322/215/323 +f 323/216/324 319/212/320 318/211/319 +f 318/211/319 322/215/323 323/216/324 +f 324/148/325 320/213/321 319/212/320 +f 319/212/320 323/216/324 324/148/325 +f 325/217/326 321/214/322 292/183/292 +f 292/183/292 297/188/297 325/217/326 +f 326/218/327 322/215/323 321/214/322 +f 321/214/322 325/217/326 326/218/327 +f 327/219/328 323/216/324 322/215/323 +f 322/215/323 326/218/327 327/219/328 +f 328/220/329 324/148/325 323/216/324 +f 323/216/324 327/219/328 328/220/329 +f 299/221/299 325/217/326 297/188/297 +f 297/188/297 267/192/267 299/221/299 +f 301/222/301 326/218/327 325/217/326 +f 325/217/326 299/221/299 301/222/301 +f 303/223/303 327/219/328 326/218/327 +f 326/218/327 301/222/301 303/223/303 +f 116/152/305 328/220/329 327/219/328 +f 327/219/328 303/223/303 116/152/305 +f 329/224/330 330/225/331 331/144/332 +f 331/144/332 332/206/333 329/224/330 +f 333/226/334 334/227/335 330/225/331 +f 330/225/331 329/224/330 333/226/334 +f 335/228/336 336/229/337 334/227/335 +f 334/227/335 333/226/334 335/228/336 +f 337/230/338 338/231/339 336/229/337 +f 336/229/337 335/228/336 337/230/338 +f 339/232/340 329/224/330 332/206/333 +f 332/206/333 340/140/341 339/232/340 +f 341/233/342 333/226/334 329/224/330 +f 329/224/330 339/232/340 341/233/342 +f 342/234/343 335/228/336 333/226/334 +f 333/226/334 341/233/342 342/234/343 +f 343/235/344 337/230/338 335/228/336 +f 335/228/336 342/234/343 343/235/344 +f 344/236/345 339/232/340 340/140/341 +f 340/140/341 345/199/346 344/236/345 +f 346/237/347 341/233/342 339/232/340 +f 339/232/340 344/236/345 346/237/347 +f 347/238/348 342/234/343 341/233/342 +f 341/233/342 346/237/347 347/238/348 +f 348/239/349 343/235/344 342/234/343 +f 342/234/343 347/238/348 348/239/349 +f 349/240/350 344/236/345 345/199/346 +f 345/199/346 350/136/351 349/240/350 +f 351/241/352 346/237/347 344/236/345 +f 344/236/345 349/240/350 351/241/352 +f 352/242/353 347/238/348 346/237/347 +f 346/237/347 351/241/352 352/242/353 +f 353/243/354 348/239/349 347/238/348 +f 347/238/348 352/242/353 353/243/354 +f 354/244/355 349/245/350 350/152/351 +f 350/152/351 355/220/356 354/244/355 +f 356/246/357 351/247/352 349/245/350 +f 349/245/350 354/244/355 356/246/357 +f 357/248/358 352/249/353 351/247/352 +f 351/247/352 356/246/357 357/248/358 +f 358/250/359 353/251/354 352/249/353 +f 352/249/353 357/248/358 358/250/359 +f 359/252/360 354/244/355 355/220/356 +f 355/220/356 360/148/361 359/252/360 +f 361/253/362 356/246/357 354/244/355 +f 354/244/355 359/252/360 361/253/362 +f 362/254/363 357/248/358 356/246/357 +f 356/246/357 361/253/362 362/254/363 +f 363/255/364 358/250/359 357/248/358 +f 357/248/358 362/254/363 363/255/364 +f 364/256/365 359/252/360 360/148/361 +f 360/148/361 365/213/366 364/256/365 +f 366/257/367 361/253/362 359/252/360 +f 359/252/360 364/256/365 366/257/367 +f 367/258/368 362/254/363 361/253/362 +f 361/253/362 366/257/367 367/258/368 +f 368/259/369 363/255/364 362/254/363 +f 362/254/363 367/258/368 368/259/369 +f 330/225/331 364/256/365 365/213/366 +f 365/213/366 331/144/332 330/225/331 +f 334/227/335 366/257/367 364/256/365 +f 364/256/365 330/225/331 334/227/335 +f 336/229/337 367/258/368 366/257/367 +f 366/257/367 334/227/335 336/229/337 +f 338/231/339 368/259/369 367/258/368 +f 367/258/368 336/229/337 338/231/339 +f 369/260/370 370/261/371 338/231/339 +f 338/231/339 337/230/338 369/260/370 +f 371/262/372 372/263/373 370/261/371 +f 370/261/371 369/260/370 371/262/372 +f 373/264/374 374/265/375 372/263/373 +f 372/263/373 371/262/372 373/264/374 +f 375/167/376 376/73/377 374/265/375 +f 374/265/375 373/264/374 375/167/376 +f 377/266/378 369/260/370 337/230/338 +f 337/230/338 343/235/344 377/266/378 +f 378/267/379 371/262/372 369/260/370 +f 369/260/370 377/266/378 378/267/379 +f 379/268/380 373/264/374 371/262/372 +f 371/262/372 378/267/379 379/268/380 +f 380/69/381 375/167/376 373/264/374 +f 373/264/374 379/268/380 380/69/381 +f 381/269/382 377/266/378 343/235/344 +f 343/235/344 348/239/349 381/269/382 +f 382/270/383 378/267/379 377/266/378 +f 377/266/378 381/269/382 382/270/383 +f 383/271/384 379/268/380 378/267/379 +f 378/267/379 382/270/383 383/271/384 +f 384/155/385 380/69/381 379/268/380 +f 379/268/380 383/271/384 384/155/385 +f 385/272/386 381/269/382 348/239/349 +f 348/239/349 353/243/354 385/272/386 +f 386/273/387 382/270/383 381/269/382 +f 381/269/382 385/272/386 386/273/387 +f 387/274/388 383/271/384 382/270/383 +f 382/270/383 386/273/387 387/274/388 +f 388/65/389 384/155/385 383/271/384 +f 383/271/384 387/274/388 388/65/389 +f 389/275/390 385/276/386 353/251/354 +f 353/251/354 358/250/359 389/275/390 +f 390/277/391 386/278/387 385/276/386 +f 385/276/386 389/275/390 390/277/391 +f 391/279/392 387/280/388 386/278/387 +f 386/278/387 390/277/391 391/279/392 +f 392/185/393 388/81/389 387/280/388 +f 387/280/388 391/279/392 392/185/393 +f 393/281/394 389/275/390 358/250/359 +f 358/250/359 363/255/364 393/281/394 +f 394/282/395 390/277/391 389/275/390 +f 389/275/390 393/281/394 394/282/395 +f 395/283/396 391/279/392 390/277/391 +f 390/277/391 394/282/395 395/283/396 +f 396/77/397 392/185/393 391/279/392 +f 391/279/392 395/283/396 396/77/397 +f 397/284/398 393/281/394 363/255/364 +f 363/255/364 368/259/369 397/284/398 +f 398/285/399 394/282/395 393/281/394 +f 393/281/394 397/284/398 398/285/399 +f 399/286/400 395/283/396 394/282/395 +f 394/282/395 398/285/399 399/286/400 +f 400/176/401 396/77/397 395/283/396 +f 395/283/396 399/286/400 400/176/401 +f 370/261/371 397/284/398 368/259/369 +f 368/259/369 338/231/339 370/261/371 +f 372/263/373 398/285/399 397/284/398 +f 397/284/398 370/261/371 372/263/373 +f 374/265/375 399/286/400 398/285/399 +f 398/285/399 372/263/373 374/265/375 +f 376/73/377 400/176/401 399/286/400 +f 399/286/400 374/265/375 376/73/377 +f 401/156/402 402/157/403 403/65/404 +f 404/160/405 405/161/406 402/157/403 +f 402/157/403 401/156/402 404/160/405 +f 406/195/407 407/196/408 405/161/406 +f 405/161/406 404/160/405 406/195/407 +f 408/199/409 409/136/410 407/196/408 +f 407/196/408 406/195/407 408/199/409 +f 410/163/411 401/156/402 403/155/404 +f 411/165/412 404/160/405 401/156/402 +f 401/156/402 410/163/411 411/165/412 +f 412/201/413 406/195/407 404/160/405 +f 404/160/405 411/165/412 412/201/413 +f 413/140/414 408/199/409 406/195/407 +f 406/195/407 412/201/413 413/140/414 +f 414/168/415 410/163/411 403/69/404 +f 415/170/416 411/165/412 410/163/411 +f 410/163/411 414/168/415 415/170/416 +f 416/204/417 412/201/413 411/165/412 +f 411/165/412 415/170/416 416/204/417 +f 417/206/418 413/140/414 412/201/413 +f 412/201/413 416/204/417 417/206/418 +f 418/172/419 414/168/415 403/167/404 +f 419/174/420 415/170/416 414/168/415 +f 414/168/415 418/172/419 419/174/420 +f 420/208/421 416/204/417 415/170/416 +f 415/170/416 419/174/420 420/208/421 +f 421/144/422 417/206/418 416/204/417 +f 416/204/417 420/208/421 421/144/422 +f 422/177/423 418/172/419 403/73/404 +f 423/179/424 419/174/420 418/172/419 +f 418/172/419 422/177/423 423/179/424 +f 424/211/425 420/208/421 419/174/420 +f 419/174/420 423/179/424 424/211/425 +f 425/213/426 421/144/422 420/208/421 +f 420/208/421 424/211/425 425/213/426 +f 426/181/427 422/177/423 403/176/404 +f 427/183/428 423/179/424 422/177/423 +f 422/177/423 426/181/427 427/183/428 +f 428/215/429 424/211/425 423/179/424 +f 423/179/424 427/183/428 428/215/429 +f 429/148/430 425/213/426 424/211/425 +f 424/211/425 428/215/429 429/148/430 +f 430/186/431 426/181/427 403/77/404 +f 431/188/432 427/183/428 426/181/427 +f 426/181/427 430/186/431 431/188/432 +f 432/218/433 428/215/429 427/183/428 +f 427/183/428 431/188/432 432/218/433 +f 433/220/434 429/148/430 428/215/429 +f 428/215/429 432/218/433 433/220/434 +f 434/190/435 430/186/431 403/185/404 +f 435/192/436 431/188/432 430/186/431 +f 430/186/431 434/190/435 435/192/436 +f 436/222/437 432/218/433 431/188/432 +f 431/188/432 435/192/436 436/222/437 +f 437/152/438 433/220/434 432/218/433 +f 432/218/433 436/222/437 437/152/438 +f 438/156/439 434/157/435 403/65/404 +f 439/160/440 435/161/436 434/157/435 +f 434/157/435 438/156/439 439/160/440 +f 440/195/441 436/196/437 435/161/436 +f 435/161/436 439/160/440 440/195/441 +f 441/199/442 437/136/438 436/196/437 +f 436/196/437 440/195/441 441/199/442 +f 442/163/443 438/156/439 403/155/404 +f 443/165/444 439/160/440 438/156/439 +f 438/156/439 442/163/443 443/165/444 +f 444/201/445 440/195/441 439/160/440 +f 439/160/440 443/165/444 444/201/445 +f 445/140/446 441/199/442 440/195/441 +f 440/195/441 444/201/445 445/140/446 +f 446/168/447 442/163/443 403/69/404 +f 447/170/448 443/165/444 442/163/443 +f 442/163/443 446/168/447 447/170/448 +f 448/204/449 444/201/445 443/165/444 +f 443/165/444 447/170/448 448/204/449 +f 449/206/450 445/140/446 444/201/445 +f 444/201/445 448/204/449 449/206/450 +f 450/172/451 446/168/447 403/167/404 +f 451/174/452 447/170/448 446/168/447 +f 446/168/447 450/172/451 451/174/452 +f 452/208/453 448/204/449 447/170/448 +f 447/170/448 451/174/452 452/208/453 +f 453/144/454 449/206/450 448/204/449 +f 448/204/449 452/208/453 453/144/454 +f 454/177/455 450/172/451 403/73/404 +f 455/179/456 451/174/452 450/172/451 +f 450/172/451 454/177/455 455/179/456 +f 456/211/457 452/208/453 451/174/452 +f 451/174/452 455/179/456 456/211/457 +f 457/213/458 453/144/454 452/208/453 +f 452/208/453 456/211/457 457/213/458 +f 458/181/459 454/177/455 403/176/404 +f 459/183/460 455/179/456 454/177/455 +f 454/177/455 458/181/459 459/183/460 +f 460/215/461 456/211/457 455/179/456 +f 455/179/456 459/183/460 460/215/461 +f 461/148/462 457/213/458 456/211/457 +f 456/211/457 460/215/461 461/148/462 +f 462/186/463 458/181/459 403/77/404 +f 463/188/464 459/183/460 458/181/459 +f 458/181/459 462/186/463 463/188/464 +f 464/218/465 460/215/461 459/183/460 +f 459/183/460 463/188/464 464/218/465 +f 465/220/466 461/148/462 460/215/461 +f 460/215/461 464/218/465 465/220/466 +f 402/190/403 462/186/463 403/185/404 +f 405/192/406 463/188/464 462/186/463 +f 462/186/463 402/190/403 405/192/406 +f 407/222/408 464/218/465 463/188/464 +f 463/188/464 405/192/406 407/222/408 +f 409/152/410 465/220/466 464/218/465 +f 464/218/465 407/222/408 409/152/410 +f 466/156/467 467/157/468 409/65/410 +f 409/65/410 408/155/409 466/156/467 +f 468/160/469 469/161/470 467/157/468 +f 467/157/468 466/156/467 468/160/469 +f 470/195/471 471/196/472 469/161/470 +f 469/161/470 468/160/469 470/195/471 +f 472/199/473 473/136/474 471/196/472 +f 471/196/472 470/195/471 472/199/473 +f 474/163/475 466/156/467 408/155/409 +f 408/155/409 413/69/414 474/163/475 +f 475/165/476 468/160/469 466/156/467 +f 466/156/467 474/163/475 475/165/476 +f 476/201/477 470/195/471 468/160/469 +f 468/160/469 475/165/476 476/201/477 +f 477/140/478 472/199/473 470/195/471 +f 470/195/471 476/201/477 477/140/478 +f 478/168/479 474/163/475 413/69/414 +f 413/69/414 417/167/418 478/168/479 +f 479/170/480 475/165/476 474/163/475 +f 474/163/475 478/168/479 479/170/480 +f 480/204/481 476/201/477 475/165/476 +f 475/165/476 479/170/480 480/204/481 +f 481/206/482 477/140/478 476/201/477 +f 476/201/477 480/204/481 481/206/482 +f 482/172/483 478/168/479 417/167/418 +f 417/167/418 421/73/422 482/172/483 +f 483/174/484 479/170/480 478/168/479 +f 478/168/479 482/172/483 483/174/484 +f 484/208/485 480/204/481 479/170/480 +f 479/170/480 483/174/484 484/208/485 +f 485/144/486 481/206/482 480/204/481 +f 480/204/481 484/208/485 485/144/486 +f 486/177/487 482/172/483 421/73/422 +f 421/73/422 425/176/426 486/177/487 +f 487/179/488 483/174/484 482/172/483 +f 482/172/483 486/177/487 487/179/488 +f 488/211/489 484/208/485 483/174/484 +f 483/174/484 487/179/488 488/211/489 +f 489/213/490 485/144/486 484/208/485 +f 484/208/485 488/211/489 489/213/490 +f 490/181/491 486/177/487 425/176/426 +f 425/176/426 429/77/430 490/181/491 +f 491/183/492 487/179/488 486/177/487 +f 486/177/487 490/181/491 491/183/492 +f 492/215/493 488/211/489 487/179/488 +f 487/179/488 491/183/492 492/215/493 +f 493/148/494 489/213/490 488/211/489 +f 488/211/489 492/215/493 493/148/494 +f 494/186/495 490/181/491 429/77/430 +f 429/77/430 433/185/434 494/186/495 +f 495/188/496 491/183/492 490/181/491 +f 490/181/491 494/186/495 495/188/496 +f 496/218/497 492/215/493 491/183/492 +f 491/183/492 495/188/496 496/218/497 +f 497/220/498 493/148/494 492/215/493 +f 492/215/493 496/218/497 497/220/498 +f 498/190/499 494/186/495 433/185/434 +f 433/185/434 437/81/438 498/190/499 +f 499/192/500 495/188/496 494/186/495 +f 494/186/495 498/190/499 499/192/500 +f 500/222/501 496/218/497 495/188/496 +f 495/188/496 499/192/500 500/222/501 +f 501/152/502 497/220/498 496/218/497 +f 496/218/497 500/222/501 501/152/502 +f 502/156/503 498/157/499 437/65/438 +f 437/65/438 441/155/442 502/156/503 +f 503/160/504 499/161/500 498/157/499 +f 498/157/499 502/156/503 503/160/504 +f 504/195/505 500/196/501 499/161/500 +f 499/161/500 503/160/504 504/195/505 +f 505/199/506 501/136/502 500/196/501 +f 500/196/501 504/195/505 505/199/506 +f 506/163/507 502/156/503 441/155/442 +f 441/155/442 445/69/446 506/163/507 +f 507/165/508 503/160/504 502/156/503 +f 502/156/503 506/163/507 507/165/508 +f 508/201/509 504/195/505 503/160/504 +f 503/160/504 507/165/508 508/201/509 +f 509/140/510 505/199/506 504/195/505 +f 504/195/505 508/201/509 509/140/510 +f 510/168/511 506/163/507 445/69/446 +f 445/69/446 449/167/450 510/168/511 +f 511/170/512 507/165/508 506/163/507 +f 506/163/507 510/168/511 511/170/512 +f 512/204/513 508/201/509 507/165/508 +f 507/165/508 511/170/512 512/204/513 +f 513/206/514 509/140/510 508/201/509 +f 508/201/509 512/204/513 513/206/514 +f 514/172/515 510/168/511 449/167/450 +f 449/167/450 453/73/454 514/172/515 +f 515/174/516 511/170/512 510/168/511 +f 510/168/511 514/172/515 515/174/516 +f 516/208/517 512/204/513 511/170/512 +f 511/170/512 515/174/516 516/208/517 +f 517/144/518 513/206/514 512/204/513 +f 512/204/513 516/208/517 517/144/518 +f 518/177/519 514/172/515 453/73/454 +f 453/73/454 457/176/458 518/177/519 +f 519/179/520 515/174/516 514/172/515 +f 514/172/515 518/177/519 519/179/520 +f 520/211/521 516/208/517 515/174/516 +f 515/174/516 519/179/520 520/211/521 +f 521/213/522 517/144/518 516/208/517 +f 516/208/517 520/211/521 521/213/522 +f 522/181/523 518/177/519 457/176/458 +f 457/176/458 461/77/462 522/181/523 +f 523/183/524 519/179/520 518/177/519 +f 518/177/519 522/181/523 523/183/524 +f 524/215/525 520/211/521 519/179/520 +f 519/179/520 523/183/524 524/215/525 +f 525/148/526 521/213/522 520/211/521 +f 520/211/521 524/215/525 525/148/526 +f 526/186/527 522/181/523 461/77/462 +f 461/77/462 465/185/466 526/186/527 +f 527/188/528 523/183/524 522/181/523 +f 522/181/523 526/186/527 527/188/528 +f 528/218/529 524/215/525 523/183/524 +f 523/183/524 527/188/528 528/218/529 +f 529/220/530 525/148/526 524/215/525 +f 524/215/525 528/218/529 529/220/530 +f 467/190/468 526/186/527 465/185/466 +f 465/185/466 409/81/410 467/190/468 +f 469/192/470 527/188/528 526/186/527 +f 526/186/527 467/190/468 469/192/470 +f 471/222/472 528/218/529 527/188/528 +f 527/188/528 469/192/470 471/222/472 +f 473/152/474 529/220/530 528/218/529 +f 528/218/529 471/222/472 473/152/474 +# 992 faces + diff --git a/Examples/Meshes/Teapot.obj.meta b/Examples/Meshes/Teapot.obj.meta new file mode 100644 index 0000000..59c470a --- /dev/null +++ b/Examples/Meshes/Teapot.obj.meta @@ -0,0 +1,66 @@ +fileFormatVersion: 2 +guid: 53158f4ed39ed53448df438bc212f7e8 +ModelImporter: + serializedVersion: 16 + fileIDToRecycleName: + 100000: //RootNode + 100002: Teapot001 + 400000: //RootNode + 400002: Teapot001 + 2300000: Teapot001 + 3300000: Teapot001 + 4300000: Teapot001 + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + optimizeGameObjects: 0 + animationCompression: 1 + animationRotationError: .5 + animationPositionError: .5 + animationScaleError: .5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + tangentSpace: + normalSmoothAngle: 60 + splitTangentsAcrossUV: 1 + normalImportMode: 1 + tangentImportMode: 1 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: .5 + foreArmTwist: .5 + upperLegTwist: .5 + legTwist: .5 + armStretch: .0500000007 + legStretch: .0500000007 + feetSpacing: 0 + rootMotionBoneName: + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + additionalBone: 0 + userData: diff --git a/Examples/Scenes.meta b/Examples/Scenes.meta new file mode 100644 index 0000000..85f95e5 --- /dev/null +++ b/Examples/Scenes.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 141384ae82c22db4b8422ccbe172ef08 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Examples/Scenes/Example.unity b/Examples/Scenes/Example.unity new file mode 100644 index 0000000000000000000000000000000000000000..156264d29e19d85b0923324fbe0e7988e04d5ff9 GIT binary patch literal 18064 zcmeHPON=B(5v?&c*ydwC#{6N{KaBsMHTYo9cF)Z2&cKX!JiWU%XsvZkcTIP(JylJ0 z^?r;c_W^??B=7+te?VHFIN}?Ki$Ssl2V3$9Brf=X1l%lxkT2N8i^!;otg0EWjIb@3 zT-8)nW@Kh$WWa z$=#i+((~F{p53{>7w2iV|8yQvBWW^6_1Cg!Gu&7Uvna`>t>8i;KaVaXRG*=Lc$W?j z#KUNLk^6ZMC@3iro`q;F%mGq) z?>BTaZF#B8wM?Hs*B`Le+%pdkD%I&`@hHdedjYIp8A;R#GYD0teB7s1O z#(5Seed_UU5-%(9hndDvO`S-yEIbpm`7iYUBc_#^R>{*ielTKH`>1WiJ$DCT7WBeA z>>U2zI<9M@?qzbM#5>q-+MSJc);+)A=NeZe0W%FVigYB!0?}r=M)oMnvJ9HwC&oUWlF%8{h}43~T1j9303ms!0Fs3w~ODls(05 z1;cCUIA(?c(H;O&hlqkL!yfc`3<<+Fl+g~QzA$W2Ps^(ebx4X)0B$S-g1X9$2YU_N z*w96Lv)ow3)AG`h4&q^tRu1e(E%L#OKu4>P54b}2x?)(pqunG#jIrB-QGLtYSF`@ptM*Iyt)BpEUOHsJOwXZu8$)CG#4 zvrzDH;An8eAcJWTKuvb>u~>`#zpVuqhEbT64%x;UeTnoea?W_r(XSz=U%tWR7AXDlkjpJlYWX@LFJSj>iVeact^RsP zrREB*}$&^+HIunBiEAgf>X~ zSvVTRUB(~_u0c!M70FoA*#e9$zWQ8j9bb$_PF5CRm1;iD4}ejc$%V;qNIL?n;rIlz zt5B=c2Ux7&7}b`IEFWcC+`3@*dX)4c>@;AfiQBbct86fY3#kjg5quvGvwoDj3^tZo zS3w|pn<#vbAyUGcBe}eR$OXnri|afKR~Qoa7&wwc-R^LLojE5oroXa*9?B%+B7aod zIAHFkK>$msh;}!G_C0NF0^f}xw9}4lcMF|@II@LsoOcFcFFiG8{qbCbPfC~?(NfJ) zdrrYo>vrV|pl>T2EtBn?=C(Z-fvAL%#HxEacy<*I$AExCo15cEFx&>+Gr?IlU_m0m zaL;v6Ig-V2&vkg^5<{zxfF+=PB&jc$X?=v27g6mh7A$c%9M?7o(F~fbhP8Hs5H!Fx zXjXxwO|F8$N&7NUZPig|V_sBi9mKX^WIclt6{GA-HfT0zD&uY>Bem{91Xmv^T!NP2 zuFMr9wcbGc^e~7wY~i!j5omLi<#tNSP@gugdH-QP%)5j2G|d}=?~(~mLe?KBBQW356+B^j3d_fwJhBr0fAx<(+YLal9&1_p{&(Tx&zv9gipTQR;6c^o5!;C4BN77 z-GLH`YGaq5mW9iS+9{jWRi@{e)|B5m%SnFAm&p}&$nle9%8n3ty4q5^=PLD~j9f2| z;EN5^-emhdxD%mk8frlqI^8IVI#CXe#@l#9LiyK@b{27PfQ>;68;ONE zm3!5|v8qNn)3nOzE7TqejifVzXMxS)fC79YSrW^T3}P%@gE70L(TY{Z;I0bB=vnou zV9W)CUauxBiZX*d7oitQ%Aq#qDXHD*R>GQH*-afKvSUR+PXJqvwd$l$sXA7;Cgf{_ z%3d*6>y3zx6OXlstE68uWb24PuWfom_Pvp`TN|?Pl7y(}cRoB(YBn9(YMkfgLk8Ay z1;Ny8=ZtARG>pbM*M$K><*XkAIg)^Zk}svSQ3O(d*)s*DBi*32;bz#44i7Tg9Zo4~ z2fe=pnu44G5Ie|pz(6iiO!P`Fkv}>!|AC3}eC?i7izHbXCmHIAjEhNIWAAd#0dAs+Y^2sSOf!PgL5M zJyUNoUHf9=#O7++6JKwQoFSWf)HMRpE#mX9Ty{epG`j&YZw2W}jEzjHK#QVLLJ zxc}ano#N9neZX5f7K>y~RSR%h50k!(+=H-+KY?wxlYZ0swL&Qf(9w@Yo1jbfxQhUR zVBBqy!}O}C1ut8fB8yo%MMAP3jnm^um zC(&34EnaO$2!Lmeu_&d)7F*%w46167t?<)`s{UD>v?>BJAA>h-%DQlDF$+(@n{XsD z>$u_`-DEpD`nqgFJ0WLulXK+0pWb7uw5I&VV`5K;5%B}h-Q|{+o*M`BmUm-SEpS3v zgk)D$y2R@ar=(Xqa&U$OK~x+>aZ2j%!nQ!}w6~BE?Wpp^U&Dnie09&luCtGDYebt& zO#3B|cFJ$6pF+JJ_Tq^UU;C!Sr6pgt11-)YGCJvB_ORsoh8jot8?9S$%+$`Jkc}Uj za)U>EmgiR3mZPN`E9H2VatVlUYAAn*@^%-VyFbq$HGm=N&odsT=auMWG(^O)8YW?1 zcdOtCG%<$JOM?lY>$$~Gsk+*7;lj2(_Q&e4f)(f55d$XoB*$KWP4mj&X(0(?Yy?kl z9SkZ;HE*C&Vwnm}P@EFzc;#%;u8Tp5D%JA=cx~I1GFF@qc*|n6LP@*f;~+k(!D7z2 z9BvL&Xv#WB`HEZXGP$=hc2#7==5u_zA_l8SHL=+JRVAu-u1M)I;RTY^wu->pC$ur7 zwqIky3nZCO?3QC7AQV(_qSdD(MP+XF-R=y-F2- znJraBx^A6(?>1kVHIOcC_pzDJ$vl16*Nx`W)cugei&ZOJ3+=M!Uj2|&+P3>NwBx~Y zE|(#G>}tQ?kc}D}w(9p4A~%UcY_#f^%SMe2Q2lb*2D1^VU(Wk8%&k908=eMECNeGb zf%;H)!)$!&Q;FOp*qIF^iSdZMq^$!n{ebZxeB^zS&LqRBCjJE^|;MI}p3PZn~?MI7QIx_wHE`G{2oz8@(zdG3(wYyn5 z9(&s2JA0|avl@20lZonD88Z%j+Ue)}uZt3l=1-!q(sWg5z(EmlNrt zD@zaS_bOGgJ9}Y-;{>Mx2;STyM<~|s(>R)ggYEskS;kw3FY|)-eT$y8?sb&+8s$Aed2pV%uBW{Fh{-GI zd5^npKwZkS?cGRuFHs)&!&f^Q-EaQI_g62Z&K{v>?c)~8dyMjCDeoS4-AZ}SxIC;e zaot9FFS$I(3)f!Cdxi26dPaPK>vqa}fP`atAvVgSlY|@sG5U`M=tIAoCJFhv;~NA9 z^qJLh`b{GJ#w57?p4a|-*Wd16_|Cuf{_^@g5C1^g+4rm8{^`&&OJ95XXD@b+9ln0U zYrX8pe>&R=g6Uik{BGXl@1tjTP4}Uhi~n%Nol^eeg%@8~nbV8vf=&}X+v-#@Q8w(r}QCa#aNU)238F-bh#g*H@;#%i;f9*@c9Z|!Y>pWbRvsst6}Wi68?Y|ZR0AFZM)2^K7lVkZ@O>k@!z**FFV`1 z@2SUr?epqWR^N(grUDr39!CI!*2owJ4?{(Q0ppH(_{Qa}$`)+^TxMowSY}pMDwnxy zK($?htaeUlA9MHePue>Yg6<#Z-~Ox;(X-b!bXhN@+3C*Xas;s7m(TosCvq->zN$V0 ztN>a_05gCZ62R^uc?d7bP{{HH#b5EZ=>u?VIh%G$%#1n)O4=x75XkNHH+oG~(VLwQcM}K!<7!IbO;|I~5 USN{0?zB^vO`ZwB_+)K)T13r*o-2eap literal 0 HcmV?d00001 diff --git a/Examples/Scenes/Example.unity.meta b/Examples/Scenes/Example.unity.meta new file mode 100644 index 0000000..48a2af6 --- /dev/null +++ b/Examples/Scenes/Example.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 8573b7b1c7256de4896b3054d17de1b7 +DefaultImporter: + userData: diff --git a/Examples/Scripts.meta b/Examples/Scripts.meta new file mode 100644 index 0000000..76c47cf --- /dev/null +++ b/Examples/Scripts.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 6f612615b304fd249886c72faee156e0 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Examples/Scripts/Example.cs b/Examples/Scripts/Example.cs new file mode 100644 index 0000000..8110127 --- /dev/null +++ b/Examples/Scripts/Example.cs @@ -0,0 +1,51 @@ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +using Random = UnityEngine.Random; + +[RequireComponent(typeof(MeshFilter))] +public class Example : MonoBehaviour +{ + //------------------------------------------------------------------------------------------------------------ + private const string INPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot.obj"; + private const string OUTPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj"; + + //------------------------------------------------------------------------------------------------------------ + private void Start() + { + // Load the OBJ in + var lStream = new FileStream(INPUT_PATH, FileMode.Open); + var lOBJData = OBJLoader.LoadOBJ(lStream); + var lMeshFilter = GetComponent(); + lMeshFilter.mesh.LoadOBJ(lOBJData); + lStream.Close(); + + lStream = null; + lOBJData = null; + + // Wiggle Vertices in Mesh + var lVertices = lMeshFilter.mesh.vertices; + for (int lCount = 0; lCount < lVertices.Length; ++lCount) + { + lVertices[lCount] = lVertices[lCount] + Vector3.up * Mathf.Sin(lVertices[lCount].x) * 4f; + } + lMeshFilter.mesh.vertices = lVertices; + + // Export the new Wiggled Mesh + if (File.Exists(OUTPUT_PATH)) + { + File.Delete(OUTPUT_PATH); + } + lStream = new FileStream(OUTPUT_PATH, FileMode.Create); + lOBJData = lMeshFilter.mesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } +} \ No newline at end of file diff --git a/Examples/Scripts/Example.cs.meta b/Examples/Scripts/Example.cs.meta new file mode 100644 index 0000000..0575581 --- /dev/null +++ b/Examples/Scripts/Example.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3ab7cfdf40b84b41a7adc35c545c226 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins.meta b/Plugins.meta new file mode 100644 index 0000000..4870cb1 --- /dev/null +++ b/Plugins.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 0a5ac41a41be22246b94c47885410104 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Plugins/Extension.meta b/Plugins/Extension.meta new file mode 100644 index 0000000..5639c82 --- /dev/null +++ b/Plugins/Extension.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 8c1f4314c6ab61442aeeb22e185f3614 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Plugins/Extension/GameObjectExtension.cs b/Plugins/Extension/GameObjectExtension.cs new file mode 100644 index 0000000..06a8ae8 --- /dev/null +++ b/Plugins/Extension/GameObjectExtension.cs @@ -0,0 +1,112 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class GameObjectExt + { + //------------------------------------------------------------------------------------------------------------ + public static T GetOrAddComponent(this GameObject lGo) where T : Component + { + T lComponent = lGo.GetComponent(); + if (lComponent == null) + { + lComponent = lGo.gameObject.AddComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T GetComponentOfChild(this GameObject lGo, string lName) where T : Component + { + T lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T[] GetComponentsOfChild(this GameObject lGo, string lName) where T : Component + { + T[] lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponents(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static GameObject InstantiateAsChild(this GameObject lGo, GameObject lObject) + { + GameObject lNewGo = lObject != null ? (GameObject)GameObject.Instantiate(lObject) : new GameObject(); + lNewGo.transform.parent = lGo.transform; + lNewGo.transform.localPosition = Vector3.zero; + lNewGo.transform.localRotation = Quaternion.identity; + lNewGo.transform.localScale = Vector3.one; + return lNewGo; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool DestroyChildIfExists(this GameObject lGo, string lName) + { + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + GameObject.Destroy(lTransform.gameObject); + return true; + } + else + { + return false; + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool ContainsChildren(this GameObject lGo, params string[] lPaths) + { + for (int lCount = 0; lCount < lPaths.Length; ++lCount) + { + if (lGo.transform.FindChild(lPaths[lCount]) == null) + { + return false; + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsChildOf(this GameObject lGo, GameObject lParent) + { + Transform lTransform = lGo.transform; + while (lTransform.parent != null) + { + if (lTransform == lParent.transform) + { + return true; + } + lTransform = lTransform.parent; + } + return false; + } + + //------------------------------------------------------------------------------------------------------------ + public static void SetLayerRecursively(this GameObject lGo, int lLayer) + { + lGo.layer = lLayer; + foreach (Transform lTransform in lGo.transform) + { + lTransform.gameObject.SetLayerRecursively(lLayer); + } + } + } +} diff --git a/Plugins/Extension/GameObjectExtension.cs.meta b/Plugins/Extension/GameObjectExtension.cs.meta new file mode 100644 index 0000000..30e3794 --- /dev/null +++ b/Plugins/Extension/GameObjectExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35b132c59c7910c4b99e560a0f9baf95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs new file mode 100644 index 0000000..1d447ec --- /dev/null +++ b/Plugins/Extension/MeshExtension.cs @@ -0,0 +1,600 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +using UnityEngine; + +namespace UnityExtension +{ + public static class MeshExt + { + //------------------------------------------------------------------------------------------------------------ + public static void RecalculateTangents(this Mesh lMesh) + { + //speed up math by copying the mesh arrays + int[] triangles = lMesh.triangles; + Vector3[] vertices = lMesh.vertices; + Vector2[] uv = lMesh.uv; + Vector3[] normals = lMesh.normals; + + //variable definitions + int triangleCount = triangles.Length; + int vertexCount = vertices.Length; + + Vector3[] tan1 = new Vector3[vertexCount]; + Vector3[] tan2 = new Vector3[vertexCount]; + + Vector4[] tangents = new Vector4[vertexCount]; + + for (long a = 0; a < triangleCount; a += 3) + { + long i1 = triangles[a + 0]; + long i2 = triangles[a + 1]; + long i3 = triangles[a + 2]; + + Vector3 v1 = vertices[i1]; + Vector3 v2 = vertices[i2]; + Vector3 v3 = vertices[i3]; + + Vector2 w1 = uv[i1]; + Vector2 w2 = uv[i2]; + Vector2 w3 = uv[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1[i1] += sdir; + tan1[i2] += sdir; + tan1[i3] += sdir; + + tan2[i1] += tdir; + tan2[i2] += tdir; + tan2[i3] += tdir; + } + + + for (long a = 0; a < vertexCount; ++a) + { + Vector3 n = normals[a]; + Vector3 t = tan1[a]; + + //Vector3 tmp = (t - n * Vector3.Dot(n, t)).normalized; + //tangents[a] = new Vector4(tmp.x, tmp.y, tmp.z); + Vector3.OrthoNormalize(ref n, ref t); + tangents[a].x = t.x; + tangents[a].y = t.y; + tangents[a].z = t.z; + + tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; + } + + lMesh.tangents = tangents; + } + + //------------------------------------------------------------------------------------------------------------ + public static void LoadOBJ(this Mesh lMesh, OBJData lData) + { + List lVertices = new List(); + List lNormals = new List(); + List lUVs = new List(); + List[] lIndices = new List[lData.m_Groups.Count]; + OBJGroup lGroup = null; + + lMesh.subMeshCount = lData.m_Groups.Count; + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + lGroup = lData.m_Groups[lGCount]; + lIndices[lGCount] = new List(); + + for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) + { + for (int lVCount = 0; lVCount < lGroup.Faces[lFCount].Count; ++lVCount) + { + if (lGroup.Faces[lFCount][lVCount].m_VertexIndex < lData.m_Vertices.Count) + { + lIndices[lGCount].Add(lVertices.Count); + + lVertices.Add(lData.m_Vertices[lGroup.Faces[lFCount][lVCount].m_VertexIndex]); + lUVs.Add(lData.m_UVs[lGroup.Faces[lFCount][lVCount].m_UVIndex]); + lNormals.Add(lData.m_Normals[lGroup.Faces[lFCount][lVCount].m_NormalIndex]); + } + } + } + } + lMesh.vertices = lVertices.ToArray(); + lMesh.uv = lUVs.ToArray(); + lMesh.normals = lNormals.ToArray(); + lMesh.RecalculateTangents(); + + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static OBJData EncodeOBJ(this Mesh lMesh) + { + OBJData lData = new OBJData + { + m_Vertices = new List(lMesh.vertices), + m_UVs = new List(lMesh.uv), + m_Normals = new List(lMesh.normals), + m_UV2s = new List(lMesh.uv1), + m_Colors = new List(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; + } + + //------------------------------------------------------------------------------------------------------------ + internal const int MESH_BINARY_HEADER_SIZE = 20; + internal const short MESH_BINARY_SIGNATURE = 0xF5; + internal const short MESH_BINARY_VERSION = 1; + + //------------------------------------------------------------------------------------------------------------ + public static bool LoadBinary(this Mesh lMesh, byte[] lData) + { + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataOffset = MESH_BINARY_HEADER_SIZE; + int lDeltaOffset = 0; + + if (lData == null || + lData.Length < MESH_BINARY_HEADER_SIZE) + { + return false; + } + + // Header + short lSignature = BitConverter.ToInt16(lData, 0); + short lVersion = BitConverter.ToInt16(lData, 2); + + if (lSignature != MESH_BINARY_SIGNATURE || + lVersion != MESH_BINARY_VERSION) + { + return false; + } + + lMesh.Clear(); + + int lVertexCount = BitConverter.ToInt32(lData, 4); + int lIndexCount = BitConverter.ToInt32(lData, 8); + int lSubMeshCount = BitConverter.ToInt32(lData, 12); + + byte lFlags = lData[16]; + + bool lUVFlag = (lFlags & 1) > 0; + bool lUV1Flag = (lFlags & 2) > 0; + bool lUV2Flag = (lFlags & 4) > 0; + bool lNormalFlag = (lFlags & 8) > 0; + bool lTangentFlag = (lFlags & 16) > 0; + bool lColorFlag = (lFlags & 32) > 0; + bool lBindPoseFlag = (lFlags & 64) > 0; + bool lBoneWeightFlag = (lFlags & 128) > 0; + + // Vertices + Vector3[] lVertices = new Vector3[lVertexCount]; + lDeltaOffset = lVertices.Length * lSizeOfVector3; + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.vertices = lVertices; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = null; + if (lUVFlag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv = lUVs; + Debug.Log("UV Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 1 + if (lUV1Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv1 = lUVs; + Debug.Log("UV1 Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 2 + if (lUV2Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv2 = lUVs; + Debug.Log("UV2 Count : " + lUVs.Length); + lUVs = null; + } + + // Normals + if (lNormalFlag == true) + { + Vector3[] lNormals = new Vector3[lVertexCount]; + lDeltaOffset = lNormals.Length * lSizeOfVector3; + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.normals = lNormals; + Debug.Log("Normal Count : " + lNormals.Length); + lNormals = null; + } + + // Tangents + if (lTangentFlag == true) + { + Vector4[] lTangents = new Vector4[lVertexCount]; + lDeltaOffset = lTangents.Length * lSizeOfVector4; + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.tangents = lTangents; + Debug.Log("Tangents Count : " + lTangents.Length); + lTangents = null; + } + + // Colors + if (lColorFlag == true) + { + Color[] lColors = new Color[lVertexCount]; + lDeltaOffset = lColors.Length * lSizeOfColor; + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.colors = lColors; + lColors = null; + } + + // Bind Poses + if (lBindPoseFlag == true) + { + Matrix4x4[] lBindPoses = new Matrix4x4[lVertexCount]; + lDeltaOffset = lBindPoses.Length * lSizeOfMatrix4x4; + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.bindposes = lBindPoses; + lBindPoses = null; + } + + // Bone Weights + if (lBoneWeightFlag == true) + { + BoneWeight[] lBoneWeight = new BoneWeight[lVertexCount]; + lDeltaOffset = lBoneWeight.Length * lSizeOfBoneWeight; + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.boneWeights = lBoneWeight; + lBoneWeight = null; + } + + // Indices + int[] lIndices = new int[lIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + lMesh.triangles = lIndices; + lIndices = null; + + // SubMesh Indices + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + int lSubMeshIndexCount = BitConverter.ToInt32(lData, lDataOffset); + lDataOffset += sizeof(int); + + lIndices = new int[lSubMeshIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + + if (lIndices.Length > 0 && + lIndices.Length % 3 == 0) + { + lMesh.SetTriangles(lIndices, lSubMeshIndex); + } + + lIndices = null; + } + + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeBinary(this Mesh lMesh) + { + // Currently no support for BlendShape + + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataSize = MESH_BINARY_HEADER_SIZE; + int lDeltaSize = 0; + + bool lUVFlag = false, lUV1Flag = false, lUV2Flag = false, + lNormalFlag = false, lTangentFlag = false, lColorFlag = false, + lBindPoseFlag = false, lBoneWeightFlag = false; + + byte[] lData = new byte[lDataSize]; + + // Vertices + Vector3[] lVertices = lMesh.vertices; + Int32Converter lVertexCount = lVertices.Length; + lDeltaSize = lVertices.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = lMesh.uv; + if (lUVs.Length > 0) + { + lUVFlag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 1 + lUVs = lMesh.uv1; + if (lUVs.Length > 0) + { + lUV1Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 2 + lUVs = lMesh.uv2; + if (lUVs.Length > 0) + { + lUV2Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // Normals + Vector3[] lNormals = lMesh.normals; + if (lNormals.Length > 0) + { + lNormalFlag = true; + lDeltaSize = lNormals.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lNormals = null; + + // Tangents + Vector4[] lTangents = lMesh.tangents; + if (lTangents.Length > 0) + { + lTangentFlag = true; + lDeltaSize = lTangents.Length * lSizeOfVector4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lTangents = null; + + // Colors + Color[] lColors = lMesh.colors; + if (lColors.Length > 0) + { + lColorFlag = true; + lDeltaSize = lColors.Length * lSizeOfColor; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lColors = null; + + // BindPoses + Matrix4x4[] lBindPoses = lMesh.bindposes; + if (lBindPoses.Length > 0) + { + lBindPoseFlag = true; + lDeltaSize = lBindPoses.Length * lSizeOfMatrix4x4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBindPoses = null; + + // BoneWeight + BoneWeight[] lBoneWeight = lMesh.boneWeights; + if (lBoneWeight.Length > 0) + { + lBoneWeightFlag = true; + lDeltaSize = lBoneWeight.Length * lSizeOfBoneWeight; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBoneWeight = null; + + // Indices + int[] lIndices = lMesh.triangles; + Int32Converter lIndexCount = lIndices.Length; + lDeltaSize = lIndices.Length * sizeof(int); + Array.Resize(ref lData, lDataSize + lDeltaSize); + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize); + lDataSize += lDeltaSize; + lIndices = null; + + // SubMesh Indices + Int32Converter lSubMeshCount = lMesh.subMeshCount; + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + lIndices = lMesh.GetTriangles(lSubMeshIndex); + + Int32Converter lSubMeshIndexCount = lIndices.Length; + + lDeltaSize = sizeof(int) + (lIndices.Length * sizeof(int)); + Array.Resize(ref lData, lDataSize + lDeltaSize); + + lData[lDataSize + 0] = lSubMeshIndexCount.Byte1; + lData[lDataSize + 1] = lSubMeshIndexCount.Byte2; + lData[lDataSize + 2] = lSubMeshIndexCount.Byte3; + lData[lDataSize + 3] = lSubMeshIndexCount.Byte4; + + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize - sizeof(int)); + lDataSize += lDeltaSize; + } + + // Header + lData[0] = (byte)(MESH_BINARY_SIGNATURE & 0xFF); + lData[1] = (byte)((MESH_BINARY_SIGNATURE >> 8) & 0xFF); + + lData[2] = (byte)(MESH_BINARY_VERSION & 0xFF); + lData[3] = (byte)((MESH_BINARY_VERSION >> 8) & 0xFF); + + lData[4] = lVertexCount.Byte1; + lData[5] = lVertexCount.Byte2; + lData[6] = lVertexCount.Byte3; + lData[7] = lVertexCount.Byte4; + + lData[8] = lIndexCount.Byte1; + lData[9] = lIndexCount.Byte2; + lData[10] = lIndexCount.Byte3; + lData[11] = lIndexCount.Byte4; + + lData[12] = lSubMeshCount.Byte1; + lData[13] = lSubMeshCount.Byte2; + lData[14] = lSubMeshCount.Byte3; + lData[15] = lSubMeshCount.Byte4; + + lData[16] = (byte)( + (lUVFlag ? 1 : 0) | + (lUV1Flag ? 2 : 0) | + (lUV2Flag ? 4 : 0) | + (lNormalFlag ? 8 : 0) | + (lTangentFlag ? 16 : 0) | + (lColorFlag ? 32 : 0) | + (lBindPoseFlag ? 64 : 0) | + (lBoneWeightFlag ? 128 : 0)); + + return lData; + } + } +} diff --git a/Plugins/Extension/MeshExtension.cs.meta b/Plugins/Extension/MeshExtension.cs.meta new file mode 100644 index 0000000..c9ff685 --- /dev/null +++ b/Plugins/Extension/MeshExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a643d266ae55c8845ac48528640b7e8e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/StringExtensions.cs b/Plugins/Extension/StringExtensions.cs new file mode 100644 index 0000000..8c95499 --- /dev/null +++ b/Plugins/Extension/StringExtensions.cs @@ -0,0 +1,43 @@ + +using System; +using System.Globalization; + +public static class StringExt +{ + //------------------------------------------------------------------------------------------------------------ + public static float ParseInvariantFloat(this string floatString) + { + return float.Parse(floatString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static int ParseInvariantInt(this string intString) + { + return int.Parse(intString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool EqualsInvariantCultureIgnoreCase(this string str, string s) + { + return str.Equals(s, StringComparison.InvariantCultureIgnoreCase); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrEmpty(this string str) + { + return string.IsNullOrEmpty(str); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrWhiteSpace(string value) + { + if (value == null) + return true; + for (int index = 0; index < value.Length; ++index) + { + if (!char.IsWhiteSpace(value[index])) + return false; + } + return true; + } +} \ No newline at end of file diff --git a/Plugins/Extension/StringExtensions.cs.meta b/Plugins/Extension/StringExtensions.cs.meta new file mode 100644 index 0000000..b911e8c --- /dev/null +++ b/Plugins/Extension/StringExtensions.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5403d11ff2ec0124a9a20522559dfcfa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/Texture2DExtension.cs b/Plugins/Extension/Texture2DExtension.cs new file mode 100644 index 0000000..b86615d --- /dev/null +++ b/Plugins/Extension/Texture2DExtension.cs @@ -0,0 +1,55 @@ + +using System; +using System.IO; +using System.Collections.Generic; + +using UnityEngine; + +namespace UnityExtension +{ + public static class Texture2DExt + { + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeToTGA(this Texture2D lTexture) + { + MemoryStream lDataStream = new MemoryStream(18 + (lTexture.width * lTexture.height * 3)); + BinaryWriter lDataWriter = new BinaryWriter(lDataStream); + + if (lDataWriter != null) + { + lDataWriter.Write((short)0); + lDataWriter.Write((byte)2); + lDataWriter.Write((int)0); + lDataWriter.Write((int)0); + lDataWriter.Write((byte)0); + lDataWriter.Write((short)lTexture.width); + lDataWriter.Write((short)lTexture.height); + lDataWriter.Write((byte)24); + lDataWriter.Write((byte)0); + + Color32[] lPixelData = lTexture.GetPixels32(); + for (int lCount = 0; lCount < lPixelData.Length; ++lCount) + { + lDataWriter.Write(lPixelData[lCount].b); + lDataWriter.Write(lPixelData[lCount].g); + lDataWriter.Write(lPixelData[lCount].r); + } + } + + return lDataStream.GetBuffer(); + } + + //------------------------------------------------------------------------------------------------------------ + public static void ConvertLightmapToMobile(this Texture2D lTexture) + { + Color[] lColorData = lTexture.GetPixels(); + for (int lCount = 0; lCount < lColorData.Length; ++lCount) + { + lColorData[lCount] = (lColorData[lCount] * (8f * lColorData[lCount].a)) * 0.5f; + } + lTexture.SetPixels(lColorData); + lTexture.Apply(); + lColorData = null; + } + } +} \ No newline at end of file diff --git a/Plugins/Extension/Texture2DExtension.cs.meta b/Plugins/Extension/Texture2DExtension.cs.meta new file mode 100644 index 0000000..9b0d439 --- /dev/null +++ b/Plugins/Extension/Texture2DExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9260066d99f960241b2a222401bcb685 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/TransformExtension.cs b/Plugins/Extension/TransformExtension.cs new file mode 100644 index 0000000..3ee939e --- /dev/null +++ b/Plugins/Extension/TransformExtension.cs @@ -0,0 +1,28 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class TransformExt + { + //------------------------------------------------------------------------------------------------------------ + public static void LocalReset(this Transform lTransform) + { + lTransform.localPosition = Vector3.zero; + lTransform.localRotation = Quaternion.identity; + lTransform.localScale = Vector3.one; + } + + //------------------------------------------------------------------------------------------------------------ + public static void Align(this Transform lTransform, Transform lTarget) + { + lTransform.position = lTarget.position; + lTransform.rotation = lTarget.rotation; + } + } +} diff --git a/Plugins/Extension/TransformExtension.cs.meta b/Plugins/Extension/TransformExtension.cs.meta new file mode 100644 index 0000000..6075523 --- /dev/null +++ b/Plugins/Extension/TransformExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8e76b9c1894ec743ae076720e775f49 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/UnityExtension.cs b/Plugins/Extension/UnityExtension.cs new file mode 100644 index 0000000..97f4064 --- /dev/null +++ b/Plugins/Extension/UnityExtension.cs @@ -0,0 +1,239 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Utils + { + //------------------------------------------------------------------------------------------------------------ + public static bool HasKeys(Dictionary lData, params string[] lKeys) + { + if (lKeys != null) + { + for (int lCount = 0; lCount < lKeys.Length; ++lCount) + { + if (!lData.ContainsKey(lKeys[lCount])) + { + return false; + } + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildren(GameObject lGo, string lTarget) + { + if (lGo != null) + { + Transform lTransform = null; + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lTransform.name.Contains(lTarget)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildrenRegex(GameObject lGo, string lPattern) + { + if (lGo != null) + { + Transform lTransform = null; + Regex lRegex = new Regex(lPattern); + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lRegex.IsMatch(lTransform.name)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void VerifyObjects(string lMsg, params object[] lObjects) + { + for (int lCount = 0; lCount < lObjects.Length; ++lCount) + { + if (lObjects[lCount] == null) + { + Debug.LogError(lMsg); + break; + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool JSONCheck(string lText) + { + return !string.IsNullOrEmpty(lText) && lText[0] == '{'; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3Json(string lJsonData) + { + string[] lVector3Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector3 lVector3 = Vector3.zero; + + if (float.TryParse(lVector3Array[0], out lVector3.x) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[1], out lVector3.y) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[2], out lVector3.z) == false) + { + return Vector3.zero; + } + + return lVector3; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4Json(string lJsonData) + { + string[] lVector4Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector4 lVector4 = Vector4.zero; + + if (float.TryParse(lVector4Array[0], out lVector4.x) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[1], out lVector4.y) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[2], out lVector4.z) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[3], out lVector4.w) == false) + { + return Vector4.zero; + } + + return lVector4; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector2 ParseVector2String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + + return new Vector2(lX, lY); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + + return new Vector3(lX, lY, lZ); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + float lW = lParts[3].ParseInvariantFloat(); + + return new Vector4(lX, lY, lZ, lW); + } + + //------------------------------------------------------------------------------------------------------------ + public static Quaternion ParseQuaternion(string lJsonData) + { + string[] lQuaternionArray = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Quaternion lQuaternion = Quaternion.identity; + + if (float.TryParse(lQuaternionArray[0], out lQuaternion.x) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[1], out lQuaternion.y) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[2], out lQuaternion.z) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[3], out lQuaternion.w) == false) + { + return Quaternion.identity; + } + + return lQuaternion; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector3String(Vector3 lVector3) + { + return "(" + + lVector3.x.ToString("f3") + "," + + lVector3.y.ToString("f3") + "," + + lVector3.z.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector4String(Vector4 lVector4) + { + return "(" + + lVector4.x.ToString("f3") + "," + + lVector4.y.ToString("f3") + "," + + lVector4.z.ToString("f3") + "," + + lVector4.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string QuaternionString(Quaternion lQuaternion) + { + return "(" + + lQuaternion.x.ToString("f3") + "," + + lQuaternion.y.ToString("f3") + "," + + lQuaternion.z.ToString("f3") + "," + + lQuaternion.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static int FirstInt(string lJsonData) + { + string lDigits = ""; + for (int lCount = 0; lCount < lJsonData.Length && Char.IsDigit(lJsonData[lCount]); ++lCount) + { + lDigits += lJsonData[lCount]; + } + return int.Parse(lDigits); + } + } +} diff --git a/Plugins/Extension/UnityExtension.cs.meta b/Plugins/Extension/UnityExtension.cs.meta new file mode 100644 index 0000000..2d06f8a --- /dev/null +++ b/Plugins/Extension/UnityExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06a010ef6a1e94840a51827a2a02badc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Extension/VectorExtension.cs b/Plugins/Extension/VectorExtension.cs new file mode 100644 index 0000000..95cec36 --- /dev/null +++ b/Plugins/Extension/VectorExtension.cs @@ -0,0 +1,35 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Vector3Ext + { + //------------------------------------------------------------------------------------------------------------ + public static readonly Vector3 IgnoreX = new Vector3(0f, 1f, 1f); + public static readonly Vector3 IgnoreY = new Vector3(1f, 0f, 1f); + public static readonly Vector3 IgnoreZ = new Vector3(1f, 1f, 0f); + + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector3 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static class Vector4Ext + { + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector4 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z, lVector.w); + } + } +} diff --git a/Plugins/Extension/VectorExtension.cs.meta b/Plugins/Extension/VectorExtension.cs.meta new file mode 100644 index 0000000..6c446b2 --- /dev/null +++ b/Plugins/Extension/VectorExtension.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18a26dda21abdf5468d5731a6dbd26c4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh.meta b/Plugins/Mesh.meta new file mode 100644 index 0000000..6d5a2e1 --- /dev/null +++ b/Plugins/Mesh.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: da432757bf963174d97e5319c45db1dc +folderAsset: yes +DefaultImporter: + userData: diff --git a/Plugins/Mesh/OBJ.meta b/Plugins/Mesh/OBJ.meta new file mode 100644 index 0000000..218f11f --- /dev/null +++ b/Plugins/Mesh/OBJ.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: f74fe5c4c28267845b900549b670af26 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Plugins/Mesh/OBJ/OBJData.cs b/Plugins/Mesh/OBJ/OBJData.cs new file mode 100644 index 0000000..3e3e5f9 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJData.cs @@ -0,0 +1,18 @@ + +using System.Collections.Generic; + +using UnityEngine; + +public class OBJData +{ + //------------------------------------------------------------------------------------------------------------ + public List m_Vertices = new List(); + public List m_Normals = new List(); + public List m_UVs = new List(); + public List m_UV2s = new List(); + public List m_Colors = new List(); + + //------------------------------------------------------------------------------------------------------------ + public List m_Materials = new List(); + public List m_Groups = new List(); +} \ No newline at end of file diff --git a/Plugins/Mesh/OBJ/OBJData.cs.meta b/Plugins/Mesh/OBJ/OBJData.cs.meta new file mode 100644 index 0000000..e9c7d65 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJData.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c57f7fdab36a3f4d9d97f4785a884f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh/OBJ/OBJFace.cs b/Plugins/Mesh/OBJ/OBJFace.cs new file mode 100644 index 0000000..ee76c3e --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJFace.cs @@ -0,0 +1,101 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +public class OBJFace +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Vertices = new List(); + + //------------------------------------------------------------------------------------------------------------ + public void AddVertex(OBJFaceVertex lVertex) + { + m_Vertices.Add(lVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public void ParseVertex(string lVertexString) + { + var fields = lVertexString.Split(new[] { '/' }, StringSplitOptions.None); + + var lIndex = fields[0].ParseInvariantInt(); + var faceVertex = new OBJFaceVertex + { + m_VertexIndex = lIndex - 1 + }; + + if (fields.Length > 1) + { + lIndex = fields[1].Length == 0 ? 0 : fields[1].ParseInvariantInt(); + faceVertex.m_UVIndex = lIndex - 1; + } + + if (fields.Length > 2) + { + lIndex = fields[2].Length == 0 ? 0 : fields[2].ParseInvariantInt(); + faceVertex.m_NormalIndex = lIndex - 1; + } + + if (fields.Length > 3) + { + lIndex = fields[3].Length == 0 ? 0 : fields[3].ParseInvariantInt(); + faceVertex.m_UV2Index = lIndex - 1; + } + + if (fields.Length > 4) + { + lIndex = fields[4].Length == 0 ? 0 : fields[4].ParseInvariantInt(); + faceVertex.m_ColorIndex = lIndex - 1; + } + + AddVertex(faceVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public string ToString(int lIndex) + { + OBJFaceVertex lFaceVertex = m_Vertices[lIndex]; + + string lOutput = (lFaceVertex.m_VertexIndex + 1).ToString(); + + if (lFaceVertex.m_UVIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UVIndex + 1).ToString()); + } + + if (lFaceVertex.m_NormalIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_NormalIndex + 1).ToString()); + } + + if (lFaceVertex.m_UV2Index > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UV2Index + 1).ToString()); + } + + if (lFaceVertex.m_ColorIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_ColorIndex + 1).ToString()); + } + + return lOutput; + } + + //------------------------------------------------------------------------------------------------------------ + public OBJFaceVertex this[int i] + { + get { return m_Vertices[i]; } + } + + //------------------------------------------------------------------------------------------------------------ + public int Count + { + get { return m_Vertices.Count; } + } +} diff --git a/Plugins/Mesh/OBJ/OBJFace.cs.meta b/Plugins/Mesh/OBJ/OBJFace.cs.meta new file mode 100644 index 0000000..2be93ac --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJFace.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07402f6cbfe2d0e40ab4d7363cb0ed64 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/Plugins/Mesh/OBJ/OBJFaceVertex.cs new file mode 100644 index 0000000..3302605 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJFaceVertex.cs @@ -0,0 +1,10 @@ + +public class OBJFaceVertex +{ + //------------------------------------------------------------------------------------------------------------ + public int m_VertexIndex = -1; + public int m_UVIndex = -1; + public int m_UV2Index = -1; + public int m_NormalIndex = -1; + public int m_ColorIndex = -1; +} \ No newline at end of file diff --git a/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta b/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta new file mode 100644 index 0000000..2278e77 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f5cff977d3365a4f9f33933bb603037 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh/OBJ/OBJGroup.cs b/Plugins/Mesh/OBJ/OBJGroup.cs new file mode 100644 index 0000000..581d4c9 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJGroup.cs @@ -0,0 +1,27 @@ + +using System.Collections.Generic; + +public class OBJGroup +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Faces = new List(); + + //------------------------------------------------------------------------------------------------------------ + public OBJGroup(string lName) + { + m_Name = lName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name { get; private set; } + public OBJMaterial m_Material { get; set; } + + //------------------------------------------------------------------------------------------------------------ + public IList Faces { get { return m_Faces; } } + + //------------------------------------------------------------------------------------------------------------ + public void AddFace(OBJFace lFace) + { + m_Faces.Add(lFace); + } +} \ No newline at end of file diff --git a/Plugins/Mesh/OBJ/OBJGroup.cs.meta b/Plugins/Mesh/OBJ/OBJGroup.cs.meta new file mode 100644 index 0000000..7bafc0e --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJGroup.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8508b6de42212c84ebaec559aed6c7b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh/OBJ/OBJLoader.cs b/Plugins/Mesh/OBJ/OBJLoader.cs new file mode 100644 index 0000000..2fd671c --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJLoader.cs @@ -0,0 +1,216 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +/* + * Currently only supports Triangluar Meshes + */ + +public class OBJLoader +{ + //------------------------------------------------------------------------------------------------------------ + private static OBJData m_OBJData = null; + + //------------------------------------------------------------------------------------------------------------ + private static OBJMaterial m_CurrentMaterial = null; + private static OBJGroup m_CurrentGroup = null; + + #region PROCESSORS + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseOBJActionDictionary = new Dictionary> + { + { "mtllib", (lEntry) => { /*Load MTL*/ } }, + { "usemtl", (lEntry) => { PushOBJGroupIfNeeded(); m_CurrentGroup.m_Material = m_OBJData.m_Materials.SingleOrDefault((lX) => { return lX.m_Name.EqualsInvariantCultureIgnoreCase(lEntry); }); } }, + { "v", (lEntry) => { m_OBJData.m_Vertices.Add(Utils.ParseVector3String(lEntry)); } }, + { "vn", (lEntry) => { m_OBJData.m_Normals.Add(Utils.ParseVector3String(lEntry)); } }, + { "vt", (lEntry) => { m_OBJData.m_UVs.Add(Utils.ParseVector2String(lEntry)); } }, + { "vt2", (lEntry) => { m_OBJData.m_UV2s.Add(Utils.ParseVector2String(lEntry)); } }, + { "vc", (lEntry) => { m_OBJData.m_Colors.Add(Utils.ParseVector4String(lEntry).ToColor()); } }, + { "f", PushOBJFace }, + { "g", PushOBJGroup }, + }; + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> + { + { "newmtl", PushOBJMaterial }, + { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, + { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, + { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, + { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, + { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, + { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, + { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, + { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, + { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, + }; + + #endregion + + #region PUBLIC_INTERFACE + + //------------------------------------------------------------------------------------------------------------ + public static OBJData LoadOBJ(Stream lStream) + { + m_OBJData = new OBJData(); + + StreamReader lLineStreamReader = new StreamReader(lStream); + + Action lAction = null; + string lCurrentLine = null; + string[] lFields = null; + string lKeyword = null; + string lData = null; + + while (!lLineStreamReader.EndOfStream) + { + lCurrentLine = lLineStreamReader.ReadLine(); + + if (StringExt.IsNullOrWhiteSpace(lCurrentLine) + || lCurrentLine[0] == '#') + { + continue; + } + + lFields = lCurrentLine.Trim().Split(null, 2); + if (lFields.Length < 2) + { + continue; + } + + lKeyword = lFields[0].Trim(); + lData = lFields[1].Trim(); + + lAction = null; + m_ParseOBJActionDictionary.TryGetValue(lKeyword.ToLowerInvariant(), out lAction); + + if (lAction != null) + { + lAction(lData); + } + } + + var lOBJData = m_OBJData; + m_OBJData = null; + + return lOBJData; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ExportOBJ(OBJData lData, Stream lStream) + { + StreamWriter lLineStreamWriter = new StreamWriter(lStream); + + lLineStreamWriter.WriteLine(string.Format("# File exported by Unity3D version {0}", Application.unityVersion)); + + for (int lCount = 0; lCount < lData.m_Vertices.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("v {0} {1} {2}", + lData.m_Vertices[lCount].x.ToString("n8"), + lData.m_Vertices[lCount].y.ToString("n8"), + lData.m_Vertices[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_UVs.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_UV2s.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt2 {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_Normals.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vn {0} {1} {2}", + lData.m_Normals[lCount].x.ToString("n8"), + lData.m_Normals[lCount].y.ToString("n8"), + lData.m_Normals[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_Colors.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vc {0} {1} {2} {3}", + lData.m_Colors[lCount].r.ToString("n8"), + lData.m_Colors[lCount].g.ToString("n8"), + lData.m_Colors[lCount].b.ToString("n8"), + lData.m_Colors[lCount].a.ToString("n8"))); + } + + for (int lGroup = 0; lGroup < lData.m_Groups.Count; ++lGroup) + { + lLineStreamWriter.WriteLine(string.Format("g {0}", lData.m_Groups[lGroup].m_Name)); + + for (int lFace = 0; lFace < lData.m_Groups[lGroup].Faces.Count; ++lFace) + { + lLineStreamWriter.WriteLine(string.Format("f {0} {1} {2}", + lData.m_Groups[lGroup].Faces[lFace].ToString(0), + lData.m_Groups[lGroup].Faces[lFace].ToString(1), + lData.m_Groups[lGroup].Faces[lFace].ToString(2))); + } + } + + lLineStreamWriter.Flush(); + } + + #endregion + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJMaterial(string lMaterialName) + { + m_CurrentMaterial = new OBJMaterial(lMaterialName); + m_OBJData.m_Materials.Add(m_CurrentMaterial); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroup(string lGroupName) + { + m_CurrentGroup = new OBJGroup(lGroupName); + m_OBJData.m_Groups.Add(m_CurrentGroup); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroupIfNeeded() + { + if (m_CurrentGroup == null) + { + PushOBJGroup("default"); + } + } + + //------------------------------------------------------------------------------------------------------------ + 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); + } +} \ No newline at end of file diff --git a/Plugins/Mesh/OBJ/OBJLoader.cs.meta b/Plugins/Mesh/OBJ/OBJLoader.cs.meta new file mode 100644 index 0000000..8b6563d --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJLoader.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bda02739f6fbaeb4c8c3da925164b8cf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Mesh/OBJ/OBJMaterial.cs b/Plugins/Mesh/OBJ/OBJMaterial.cs new file mode 100644 index 0000000..b16438e --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJMaterial.cs @@ -0,0 +1,42 @@ + +using UnityEngine; + +public class OBJMaterial +{ + //------------------------------------------------------------------------------------------------------------ + public OBJMaterial(string lMaterialName) + { + m_Name = lMaterialName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name; + + //------------------------------------------------------------------------------------------------------------ + public Color m_AmbientColor; + public Color m_DiffuseColor; + public Color m_SpecularColor; + public float m_SpecularCoefficient; + + //------------------------------------------------------------------------------------------------------------ + public float m_Transparency; + + //------------------------------------------------------------------------------------------------------------ + public int m_IlluminationModel; + + //------------------------------------------------------------------------------------------------------------ + public string m_AmbientTextureMap; + public string m_DiffuseTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_SpecularTextureMap; + public string m_SpecularHighlightTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_BumpMap; + public string m_DisplacementMap; + public string m_StencilDecalMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_AlphaTextureMap; +} \ No newline at end of file diff --git a/Plugins/Mesh/OBJ/OBJMaterial.cs.meta b/Plugins/Mesh/OBJ/OBJMaterial.cs.meta new file mode 100644 index 0000000..1498dc6 --- /dev/null +++ b/Plugins/Mesh/OBJ/OBJMaterial.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ceb2526c78b78c04592f312a4e65ec95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Plugins/Utils.meta b/Plugins/Utils.meta new file mode 100644 index 0000000..ea4d218 --- /dev/null +++ b/Plugins/Utils.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 94cd99f1df5fafa489e641d039f97273 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Plugins/Utils/Int32Converter.cs b/Plugins/Utils/Int32Converter.cs new file mode 100644 index 0000000..463cfba --- /dev/null +++ b/Plugins/Utils/Int32Converter.cs @@ -0,0 +1,39 @@ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Explicit)] +public struct Int32Converter +{ + //------------------------------------------------------------------------------------------------------------ + [FieldOffset(0)] + public int Value; + [FieldOffset(0)] + public byte Byte1; + [FieldOffset(1)] + public byte Byte2; + [FieldOffset(2)] + public byte Byte3; + [FieldOffset(3)] + public byte Byte4; + + //------------------------------------------------------------------------------------------------------------ + public Int32Converter(int value) + { + Byte1 = Byte2 = Byte3 = Byte4 = 0; + Value = value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32(Int32Converter value) + { + return value.Value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32Converter(int value) + { + return new Int32Converter(value); + } +} diff --git a/Plugins/Utils/Int32Converter.cs.meta b/Plugins/Utils/Int32Converter.cs.meta new file mode 100644 index 0000000..641cf16 --- /dev/null +++ b/Plugins/Utils/Int32Converter.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2980235c1e3576a4ab7dca278af19308 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Readme.txt b/Readme.txt new file mode 100644 index 0000000..d13fcf8 --- /dev/null +++ b/Readme.txt @@ -0,0 +1,36 @@ + +/* * * * * * * * * * * * Author's note * * * * * * * * * * * * * *\ +* * +* ZZ$$Z$$$$Z$$$ * +* ZZZZZZZZZZZZZ * +* ZZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* ZZ7=$OOO$?$ZO * +* Z7 $OZ IO * +* ZZZZZZZZOOOZOOOOOZZ8OZZZZZZZZZ * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* 8O8OOOOO8 88O88O8888888 D88888888 * +* 8OOOOOOO8 8OOON OO88 DO8888888 * +* DDDDDDDDD DDDD DDDD NDDDDDDDD * +* * +* http://octo-dev.co.uk * +* * +* OBJ-IO * +* * +* Copyright (c) Octo-Dev * +* * +\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +The scripts for this plugin are in [OBJ-IO/Plugins/OBJ] +and [OBJ-IO/Plugins/Extension]. + +There is an Example scene that Imports the Teapot OBJ at runtime, +distorts the vertexs and exports it again. The Export and Import +functions take System.IO.Stream as a parameter so this can be adapted +for your needs. + +The System Current only supports geometry. + +If there is any issue or bugs please contact : tim.leader.octo@gmail.com \ No newline at end of file diff --git a/Readme.txt.meta b/Readme.txt.meta new file mode 100644 index 0000000..b1fc361 --- /dev/null +++ b/Readme.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: e1f277bf041647445ac3bf5b643a46fe +TextScriptImporter: + userData: From d95c5abb08931547cbc1514794165609db1598f8 Mon Sep 17 00:00:00 2001 From: stopiccot Date: Wed, 19 Nov 2014 21:41:06 +0300 Subject: [PATCH 02/14] support meshes without normals --- Plugins/Extension/MeshExtension.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index 1d447ec..b0e4c4d 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -96,6 +96,8 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) List[] lIndices = new List[lData.m_Groups.Count]; OBJGroup lGroup = null; + bool hasNormals = lData.m_Normals.Count > 0; + lMesh.subMeshCount = lData.m_Groups.Count; for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) { @@ -112,7 +114,11 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) lVertices.Add(lData.m_Vertices[lGroup.Faces[lFCount][lVCount].m_VertexIndex]); lUVs.Add(lData.m_UVs[lGroup.Faces[lFCount][lVCount].m_UVIndex]); - lNormals.Add(lData.m_Normals[lGroup.Faces[lFCount][lVCount].m_NormalIndex]); + + if (hasNormals) + { + lNormals.Add(lData.m_Normals[lGroup.Faces[lFCount][lVCount].m_NormalIndex]); + } } } } @@ -122,6 +128,11 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) lMesh.normals = lNormals.ToArray(); lMesh.RecalculateTangents(); + if (!hasNormals) + { + lMesh.RecalculateNormals(); + } + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) { lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); From 06061451f69acff36563da91ef1a2a36013a3ceb Mon Sep 17 00:00:00 2001 From: stopiccot Date: Thu, 20 Nov 2014 15:24:29 +0300 Subject: [PATCH 03/14] for meshes with no normals we need to call RecalculateNormals() before RecalculateTangents() --- Plugins/Extension/MeshExtension.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index b0e4c4d..e72779c 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -123,16 +123,18 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) } } } + lMesh.vertices = lVertices.ToArray(); lMesh.uv = lUVs.ToArray(); lMesh.normals = lNormals.ToArray(); - lMesh.RecalculateTangents(); if (!hasNormals) { lMesh.RecalculateNormals(); } + lMesh.RecalculateTangents(); + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) { lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); From 8ca9edbe63fe261573676d7354e3287e53c35cb5 Mon Sep 17 00:00:00 2001 From: stopiccot Date: Thu, 20 Nov 2014 16:59:04 +0300 Subject: [PATCH 04/14] Support for indexed meshes --- Plugins/Extension/MeshExtension.cs | 37 +++++++++++++++++------------- Plugins/Mesh/OBJ/OBJFaceVertex.cs | 15 ++++++++++++ 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index e72779c..07274bc 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -94,41 +94,46 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) List lNormals = new List(); List lUVs = new List(); List[] lIndices = new List[lData.m_Groups.Count]; - OBJGroup lGroup = null; - - bool hasNormals = lData.m_Normals.Count > 0; + Dictionary lVertexIndexRemap = new Dictionary(); + bool lHasNormals = lData.m_Normals.Count > 0; lMesh.subMeshCount = lData.m_Groups.Count; for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) { - lGroup = lData.m_Groups[lGCount]; + OBJGroup lGroup = lData.m_Groups[lGCount]; lIndices[lGCount] = new List(); - for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) + for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) { - for (int lVCount = 0; lVCount < lGroup.Faces[lFCount].Count; ++lVCount) + OBJFace lFace = lGroup.Faces[lFCount]; + + for (int lVCount = 0; lVCount < lFace.Count; ++lVCount) { - if (lGroup.Faces[lFCount][lVCount].m_VertexIndex < lData.m_Vertices.Count) - { - lIndices[lGCount].Add(lVertices.Count); + OBJFaceVertex lFaceVertex = lFace[lVCount]; + int lVertexIndex = -1; - lVertices.Add(lData.m_Vertices[lGroup.Faces[lFCount][lVCount].m_VertexIndex]); - lUVs.Add(lData.m_UVs[lGroup.Faces[lFCount][lVCount].m_UVIndex]); + if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { + lVertexIndexRemap[lFaceVertex] = lVertices.Count; + lVertexIndex = lVertices.Count; - if (hasNormals) + lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); + lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); + if (lHasNormals) { - lNormals.Add(lData.m_Normals[lGroup.Faces[lFCount][lVCount].m_NormalIndex]); + lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); } } + + lIndices[lGCount].Add(lVertexIndex); } } } - + + lMesh.triangles = new int[]{ }; lMesh.vertices = lVertices.ToArray(); lMesh.uv = lUVs.ToArray(); lMesh.normals = lNormals.ToArray(); - - if (!hasNormals) + if (!lHasNormals) { lMesh.RecalculateNormals(); } diff --git a/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/Plugins/Mesh/OBJ/OBJFaceVertex.cs index 3302605..b31a918 100644 --- a/Plugins/Mesh/OBJ/OBJFaceVertex.cs +++ b/Plugins/Mesh/OBJ/OBJFaceVertex.cs @@ -7,4 +7,19 @@ public class OBJFaceVertex public int m_UV2Index = -1; public int m_NormalIndex = -1; public int m_ColorIndex = -1; + + public override int GetHashCode() + { + return m_VertexIndex ^ m_UVIndex ^ m_UV2Index ^ m_NormalIndex ^ m_ColorIndex; + } + + public override bool Equals(object obj) + { + OBJFaceVertex faceVertex = (OBJFaceVertex)obj; + return m_VertexIndex == faceVertex.m_VertexIndex + && m_UVIndex == faceVertex.m_UVIndex + && m_UV2Index == faceVertex.m_UV2Index + && m_NormalIndex == faceVertex.m_NormalIndex + && m_ColorIndex == m_ColorIndex; + } } \ No newline at end of file From a8bf44918be484119f56b6f83083c3346550088b Mon Sep 17 00:00:00 2001 From: stopiccot Date: Thu, 20 Nov 2014 17:09:34 +0300 Subject: [PATCH 05/14] Support for non triangle meshes --- Plugins/Extension/MeshExtension.cs | 39 +++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index 07274bc..b5923a6 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -107,24 +107,29 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) { OBJFace lFace = lGroup.Faces[lFCount]; - for (int lVCount = 0; lVCount < lFace.Count; ++lVCount) + // Unity3d doesn't support non-triangle faces + // so we do simple fan triangulation + for (int lVCount = 1; lVCount < lFace.Count - 1; ++lVCount) { - OBJFaceVertex lFaceVertex = lFace[lVCount]; - int lVertexIndex = -1; - - if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { - lVertexIndexRemap[lFaceVertex] = lVertices.Count; - lVertexIndex = lVertices.Count; - - lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); - lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); - if (lHasNormals) - { - lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); - } - } - - lIndices[lGCount].Add(lVertexIndex); + foreach (int i in new int[]{0, lVCount, lVCount + 1}) + { + OBJFaceVertex lFaceVertex = lFace[i]; + int lVertexIndex = -1; + + if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { + lVertexIndexRemap[lFaceVertex] = lVertices.Count; + lVertexIndex = lVertices.Count; + + lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); + lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); + if (lHasNormals) + { + lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); + } + } + + lIndices[lGCount].Add(lVertexIndex); + } } } } From d8f4b547ccd1ec989a949d12d5177c639f6aec9d Mon Sep 17 00:00:00 2001 From: stopiccot Date: Thu, 27 Nov 2014 21:58:15 +0300 Subject: [PATCH 06/14] Calling LoadOBJ second time gives incorrect results due to uncleaned variables --- Plugins/Mesh/OBJ/OBJLoader.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Plugins/Mesh/OBJ/OBJLoader.cs b/Plugins/Mesh/OBJ/OBJLoader.cs index 2fd671c..7d2d1dc 100644 --- a/Plugins/Mesh/OBJ/OBJLoader.cs +++ b/Plugins/Mesh/OBJ/OBJLoader.cs @@ -68,6 +68,9 @@ public static OBJData LoadOBJ(Stream lStream) { m_OBJData = new OBJData(); + m_CurrentMaterial = null; + m_CurrentGroup = null; + StreamReader lLineStreamReader = new StreamReader(lStream); Action lAction = null; From 180d28eb1080dce8d7648c4ced6090f54ccca335 Mon Sep 17 00:00:00 2001 From: stopiccot Date: Thu, 27 Nov 2014 22:01:09 +0300 Subject: [PATCH 07/14] UVs are also optional sometimes --- Plugins/Extension/MeshExtension.cs | 42 ++++++++++++++++-------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index b5923a6..e8b117a 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -96,6 +96,7 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) List[] lIndices = new List[lData.m_Groups.Count]; Dictionary lVertexIndexRemap = new Dictionary(); bool lHasNormals = lData.m_Normals.Count > 0; + bool lHasUVs = lData.m_UVs.Count > 0; lMesh.subMeshCount = lData.m_Groups.Count; for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) @@ -111,25 +112,28 @@ public static void LoadOBJ(this Mesh lMesh, OBJData lData) // so we do simple fan triangulation for (int lVCount = 1; lVCount < lFace.Count - 1; ++lVCount) { - foreach (int i in new int[]{0, lVCount, lVCount + 1}) - { - OBJFaceVertex lFaceVertex = lFace[i]; - int lVertexIndex = -1; - - if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { - lVertexIndexRemap[lFaceVertex] = lVertices.Count; - lVertexIndex = lVertices.Count; - - lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); - lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); - if (lHasNormals) - { - lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); - } - } - - lIndices[lGCount].Add(lVertexIndex); - } + foreach (int i in new int[]{0, lVCount, lVCount + 1}) + { + OBJFaceVertex lFaceVertex = lFace[i]; + int lVertexIndex = -1; + + if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { + lVertexIndexRemap[lFaceVertex] = lVertices.Count; + lVertexIndex = lVertices.Count; + + lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); + if (lHasUVs) + { + lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); + } + if (lHasNormals) + { + lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); + } + } + + lIndices[lGCount].Add(lVertexIndex); + } } } } From 5428ed3cf64d985745ec4affd5f94947ee2a2582 Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sat, 4 Apr 2015 18:09:43 -0700 Subject: [PATCH 08/14] Preparing branch to welcome unity subtree --- unity/Assets/OBJ-IO/Editor.meta | 5 - unity/Assets/OBJ-IO/Editor/OBJEditor.cs | 50 - unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta | 8 - unity/Assets/OBJ-IO/Examples.meta | 5 - unity/Assets/OBJ-IO/Examples/Meshes.meta | 5 - .../Assets/OBJ-IO/Examples/Meshes/Teapot.obj | 2354 ----------------- .../OBJ-IO/Examples/Meshes/Teapot.obj.meta | 66 - unity/Assets/OBJ-IO/Examples/Scenes.meta | 5 - .../OBJ-IO/Examples/Scenes/Example.unity | Bin 18064 -> 0 bytes .../OBJ-IO/Examples/Scenes/Example.unity.meta | 4 - unity/Assets/OBJ-IO/Examples/Scripts.meta | 5 - .../Assets/OBJ-IO/Examples/Scripts/Example.cs | 51 - .../OBJ-IO/Examples/Scripts/Example.cs.meta | 8 - unity/Assets/OBJ-IO/Plugins.meta | 5 - unity/Assets/OBJ-IO/Plugins/Extension.meta | 5 - .../Plugins/Extension/GameObjectExtension.cs | 112 - .../Extension/GameObjectExtension.cs.meta | 8 - .../OBJ-IO/Plugins/Extension/MeshExtension.cs | 627 ----- .../Plugins/Extension/MeshExtension.cs.meta | 8 - .../Plugins/Extension/StringExtensions.cs | 43 - .../Extension/StringExtensions.cs.meta | 8 - .../Plugins/Extension/Texture2DExtension.cs | 55 - .../Extension/Texture2DExtension.cs.meta | 8 - .../Plugins/Extension/TransformExtension.cs | 28 - .../Extension/TransformExtension.cs.meta | 8 - .../Plugins/Extension/UnityExtension.cs | 239 -- .../Plugins/Extension/UnityExtension.cs.meta | 8 - .../Plugins/Extension/VectorExtension.cs | 35 - .../Plugins/Extension/VectorExtension.cs.meta | 8 - unity/Assets/OBJ-IO/Plugins/Mesh.meta | 5 - unity/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta | 5 - .../Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs | 18 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta | 8 - .../Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs | 101 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta | 8 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs | 25 - .../Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta | 8 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs | 27 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta | 8 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs | 219 -- .../OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta | 8 - .../OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs | 42 - .../Plugins/Mesh/OBJ/OBJMaterial.cs.meta | 8 - unity/Assets/OBJ-IO/Plugins/Utils.meta | 5 - .../OBJ-IO/Plugins/Utils/Int32Converter.cs | 39 - .../Plugins/Utils/Int32Converter.cs.meta | 8 - unity/Assets/OBJ-IO/Readme.txt | 36 - unity/Assets/OBJ-IO/Readme.txt.meta | 4 - 48 files changed, 4353 deletions(-) delete mode 100644 unity/Assets/OBJ-IO/Editor.meta delete mode 100644 unity/Assets/OBJ-IO/Editor/OBJEditor.cs delete mode 100644 unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Examples.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Meshes.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj delete mode 100644 unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Scenes.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Scenes/Example.unity delete mode 100644 unity/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Scripts.meta delete mode 100644 unity/Assets/OBJ-IO/Examples/Scripts/Example.cs delete mode 100644 unity/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Utils.meta delete mode 100644 unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs delete mode 100644 unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta delete mode 100644 unity/Assets/OBJ-IO/Readme.txt delete mode 100644 unity/Assets/OBJ-IO/Readme.txt.meta diff --git a/unity/Assets/OBJ-IO/Editor.meta b/unity/Assets/OBJ-IO/Editor.meta deleted file mode 100644 index b944d9f..0000000 --- a/unity/Assets/OBJ-IO/Editor.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 5c86e6fe65d4e4946b243172e73ba161 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Editor/OBJEditor.cs b/unity/Assets/OBJ-IO/Editor/OBJEditor.cs deleted file mode 100644 index 2dba06e..0000000 --- a/unity/Assets/OBJ-IO/Editor/OBJEditor.cs +++ /dev/null @@ -1,50 +0,0 @@ - -using System; -using System.IO; -using System.Collections; - -using UnityEngine; -using UnityEditor; - -using UnityExtension; - -public class OBJWindow : EditorWindow -{ - //------------------------------------------------------------------------------------------------------------ - private MeshFilter m_MeshFilter = null; - - //------------------------------------------------------------------------------------------------------------ - [MenuItem("OBJ-IO/OBJ Mesh Exporter")] - public static void Execute() - { - OBJWindow.GetWindow(); - } - - //------------------------------------------------------------------------------------------------------------ - private void OnGUI() - { - m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true); - - if (m_MeshFilter != null) - { - if (GUILayout.Button("Export OBJ")) - { - var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj"); - - if (File.Exists(lOutputPath)) - { - File.Delete(lOutputPath); - } - - var lStream = new FileStream(lOutputPath, FileMode.Create); - var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ(); - OBJLoader.ExportOBJ(lOBJData, lStream); - lStream.Close(); - } - } - else - { - GUILayout.Label("Please provide a MeshFilter"); - } - } -} diff --git a/unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta b/unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta deleted file mode 100644 index e0f5e91..0000000 --- a/unity/Assets/OBJ-IO/Editor/OBJEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5cb377fb273c8634296cc421905b1d34 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Examples.meta b/unity/Assets/OBJ-IO/Examples.meta deleted file mode 100644 index 0a599e9..0000000 --- a/unity/Assets/OBJ-IO/Examples.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 33368388f581b994fab7f5ef248c0f63 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Meshes.meta b/unity/Assets/OBJ-IO/Examples/Meshes.meta deleted file mode 100644 index 616e31a..0000000 --- a/unity/Assets/OBJ-IO/Examples/Meshes.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: e0433cb2bd36d3942883bf0f0998e2bb -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj b/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj deleted file mode 100644 index 71ee314..0000000 --- a/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj +++ /dev/null @@ -1,2354 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware -# File Created: 06.03.2014 21:07:42 - -# -# object Teapot001 -# - -v 17.3454 -6.9354 33.2189 -v 18.7821 0.3405 33.2189 -v 19.0443 0.3405 32.2275 -v 17.5874 -7.0383 32.2275 -v 17.6261 -7.0548 33.5494 -v 19.0863 0.3405 33.5494 -v 18.1971 -7.2977 33.2189 -v 19.7053 0.3405 33.2189 -v 18.8261 -7.5654 32.2275 -v 20.3872 0.3405 32.2275 -v 13.4063 -12.8209 33.2189 -v 13.5925 -13.0071 32.2275 -v 13.6223 -13.0369 33.5494 -v 14.0618 -13.4764 33.2189 -v 14.5459 -13.9605 32.2275 -v 7.5208 -16.7600 33.2189 -v 7.6237 -17.0020 32.2275 -v 7.6402 -17.0407 33.5494 -v 7.8831 -17.6117 33.2189 -v 8.1508 -18.2407 32.2275 -v 0.2449 -18.1967 33.2189 -v 0.2449 -18.4589 32.2275 -v 0.2449 -18.5009 33.5494 -v 0.2449 -19.1199 33.2189 -v 0.2449 -19.8018 32.2275 -v -7.2460 -16.7600 33.2189 -v -7.6437 -17.0020 32.2275 -v -7.2140 -17.0407 33.5494 -v -7.4012 -17.6117 33.2189 -v -7.6609 -18.2407 32.2275 -v -13.1076 -12.8209 33.2189 -v -13.5558 -13.0071 32.2275 -v -13.1891 -13.0369 33.5494 -v -13.5790 -13.4764 33.2189 -v -14.0560 -13.9605 32.2275 -v -16.9272 -6.9354 33.2189 -v -17.2674 -7.0383 32.2275 -v -17.1574 -7.0548 33.5494 -v -17.7098 -7.2977 33.2189 -v -18.3362 -7.5654 32.2275 -v -18.2922 0.3405 33.2189 -v -18.5544 0.3405 32.2275 -v -18.5964 0.3405 33.5494 -v -19.2154 0.3405 33.2189 -v -19.8973 0.3405 32.2275 -v -16.8556 7.6163 33.2189 -v -17.0975 7.7192 32.2275 -v -17.1362 7.7357 33.5494 -v -17.7072 7.9786 33.2189 -v -18.3362 8.2463 32.2275 -v -12.9164 13.5018 33.2189 -v -13.1026 13.6880 32.2275 -v -13.1324 13.7178 33.5494 -v -13.5719 14.1573 33.2189 -v -14.0560 14.6414 32.2275 -v -7.0309 17.4410 33.2189 -v -7.1338 17.6829 32.2275 -v -7.1503 17.7216 33.5494 -v -7.3932 18.2926 33.2189 -v -7.6609 18.9216 32.2275 -v 0.2449 18.8776 33.2189 -v 0.2449 19.1399 32.2275 -v 0.2449 19.1818 33.5494 -v 0.2449 19.8008 33.2189 -v 0.2449 20.4827 32.2275 -v 7.5208 17.4410 33.2189 -v 7.6237 17.6829 32.2275 -v 7.6402 17.7216 33.5494 -v 7.8831 18.2926 33.2189 -v 8.1508 18.9216 32.2275 -v 13.4063 13.5018 33.2189 -v 13.5925 13.6880 32.2275 -v 13.6223 13.7178 33.5494 -v 14.0618 14.1573 33.2189 -v 14.5459 14.6414 32.2275 -v 17.3455 7.6163 33.2189 -v 17.5874 7.7192 32.2275 -v 17.6261 7.7357 33.5494 -v 18.1971 7.9786 33.2189 -v 18.8261 8.2463 32.2275 -v 21.1004 -8.5330 26.9559 -v 22.8525 0.3405 26.9559 -v 23.0843 -9.3771 21.7788 -v 25.0031 0.3405 21.7788 -v 24.4876 -9.9742 16.7904 -v 26.5242 0.3405 16.7904 -v 25.0199 -10.2006 12.0853 -v 27.1012 0.3405 12.0853 -v 16.2963 -15.7109 26.9559 -v 17.8232 -17.2378 21.7788 -v 18.9032 -18.3178 16.7904 -v 19.3129 -18.7275 12.0853 -v 9.1184 -20.5150 26.9559 -v 9.9625 -22.4989 21.7788 -v 10.5596 -23.9022 16.7904 -v 10.7860 -24.4345 12.0853 -v 0.2449 -22.2671 26.9559 -v 0.2449 -24.4177 21.7788 -v 0.2449 -25.9388 16.7904 -v 0.2449 -26.5158 12.0853 -v -8.6285 -20.5150 26.9559 -v -9.4726 -22.4989 21.7788 -v -10.0697 -23.9022 16.7904 -v -10.2961 -24.4345 12.0853 -v -15.8064 -15.7109 26.9559 -v -17.3333 -17.2378 21.7788 -v -18.4133 -18.3178 16.7904 -v -18.8230 -18.7275 12.0853 -v -20.6105 -8.5330 26.9559 -v -22.5944 -9.3771 21.7788 -v -23.9977 -9.9742 16.7904 -v -24.5300 -10.2006 12.0853 -v -22.3626 0.3405 26.9559 -v -24.5132 0.3405 21.7788 -v -26.0343 0.3405 16.7904 -v -26.6113 0.3405 12.0853 -v -20.6105 9.2139 26.9559 -v -22.5944 10.0580 21.7788 -v -23.9977 10.6551 16.7904 -v -24.5300 10.8815 12.0853 -v -15.8064 16.3918 26.9559 -v -17.3333 17.9187 21.7788 -v -18.4133 18.9988 16.7904 -v -18.8230 19.4084 12.0853 -v -8.6285 21.1959 26.9559 -v -9.4726 23.1798 21.7788 -v -10.0697 24.5831 16.7904 -v -10.2961 25.1154 12.0853 -v 0.2449 22.9480 26.9559 -v 0.2449 25.0986 21.7788 -v 0.2449 26.6197 16.7904 -v 0.2449 27.1967 12.0853 -v 9.1184 21.1959 26.9559 -v 9.9625 23.1798 21.7788 -v 10.5596 24.5831 16.7904 -v 10.7860 25.1154 12.0853 -v 16.2963 16.3918 26.9559 -v 17.8232 17.9187 21.7788 -v 18.9032 18.9988 16.7904 -v 19.3129 19.4084 12.0853 -v 21.1004 9.2139 26.9559 -v 23.0843 10.0580 21.7788 -v 24.4876 10.6551 16.7904 -v 25.0199 10.8815 12.0853 -v 24.0521 -9.7889 8.1041 -v 26.0522 0.3405 8.1041 -v 21.9230 -8.8830 5.1614 -v 23.7442 0.3405 5.1614 -v 19.7939 -7.9771 3.1630 -v 21.4362 0.3405 3.1630 -v 18.8261 -7.5654 2.0142 -v 20.3872 0.3405 2.0142 -v 18.5681 -17.9827 8.1041 -v 16.9294 -16.3440 5.1614 -v 15.2908 -14.7054 3.1630 -v 14.5459 -13.9605 2.0142 -v 10.3743 -23.4667 8.1041 -v 9.4684 -21.3376 5.1614 -v 8.5625 -19.2085 3.1630 -v 8.1508 -18.2407 2.0142 -v 0.2449 -25.4668 8.1041 -v 0.2449 -23.1588 5.1614 -v 0.2449 -20.8508 3.1630 -v 0.2449 -19.8018 2.0142 -v -9.8844 -23.4667 8.1041 -v -8.9785 -21.3376 5.1614 -v -8.0726 -19.2085 3.1630 -v -7.6609 -18.2407 2.0142 -v -18.0782 -17.9827 8.1041 -v -16.4395 -16.3440 5.1614 -v -14.8009 -14.7054 3.1630 -v -14.0560 -13.9605 2.0142 -v -23.5622 -9.7889 8.1041 -v -21.4331 -8.8830 5.1614 -v -19.3040 -7.9771 3.1630 -v -18.3362 -7.5654 2.0142 -v -25.5623 0.3405 8.1041 -v -23.2543 0.3405 5.1614 -v -20.9463 0.3405 3.1630 -v -19.8973 0.3405 2.0142 -v -23.5622 10.4698 8.1041 -v -21.4331 9.5639 5.1614 -v -19.3040 8.6580 3.1630 -v -18.3362 8.2463 2.0142 -v -18.0782 18.6636 8.1041 -v -16.4395 17.0249 5.1614 -v -14.8009 15.3863 3.1630 -v -14.0560 14.6414 2.0142 -v -9.8844 24.1476 8.1041 -v -8.9785 22.0185 5.1614 -v -8.0726 19.8894 3.1630 -v -7.6609 18.9216 2.0142 -v 0.2449 26.1477 8.1041 -v 0.2449 23.8397 5.1614 -v 0.2449 21.5317 3.1630 -v 0.2449 20.4827 2.0142 -v 10.3743 24.1476 8.1041 -v 9.4684 22.0185 5.1614 -v 8.5625 19.8894 3.1630 -v 8.1508 18.9216 2.0142 -v 18.5681 18.6636 8.1041 -v 16.9294 17.0249 5.1614 -v 15.2908 15.3863 3.1630 -v 14.5459 14.6414 2.0142 -v 24.0521 10.4698 8.1041 -v 21.9230 9.5639 5.1614 -v 19.7939 8.6580 3.1630 -v 18.8261 8.2463 2.0142 -v 18.4052 -7.3862 1.2746 -v 19.9308 0.3405 1.2746 -v 16.1551 -6.4289 0.6294 -v 17.4917 0.3405 0.6294 -v 10.5953 -4.0633 0.1731 -v 11.4648 0.3405 0.1731 -v 0.2449 0.3405 0.0000 -v 14.2219 -13.6365 1.2746 -v 12.4902 -11.9048 0.6294 -v 8.2110 -7.6256 0.1731 -v 7.9717 -17.8198 1.2746 -v 7.0143 -15.5697 0.6294 -v 4.6487 -10.0098 0.1731 -v 0.2449 -19.3454 1.2746 -v 0.2449 -16.9063 0.6294 -v 0.2449 -10.8794 0.1731 -v -7.4818 -17.8198 1.2746 -v -6.5244 -15.5697 0.6294 -v -4.1588 -10.0098 0.1731 -v -13.7320 -13.6365 1.2746 -v -12.0003 -11.9048 0.6294 -v -7.7211 -7.6256 0.1731 -v -17.9153 -7.3862 1.2746 -v -15.6652 -6.4289 0.6294 -v -10.1054 -4.0633 0.1731 -v -19.4409 0.3405 1.2746 -v -17.0018 0.3405 0.6294 -v -10.9749 0.3405 0.1731 -v -17.9153 8.0672 1.2746 -v -15.6652 7.1098 0.6294 -v -10.1054 4.7442 0.1731 -v -13.7320 14.3174 1.2746 -v -12.0003 12.5857 0.6294 -v -7.7211 8.3065 0.1731 -v -7.4818 18.5007 1.2746 -v -6.5244 16.2506 0.6294 -v -4.1588 10.6908 0.1731 -v 0.2449 20.0263 1.2746 -v 0.2449 17.5872 0.6294 -v 0.2449 11.5603 0.1731 -v 7.9717 18.5007 1.2746 -v 7.0143 16.2506 0.6294 -v 4.6487 10.6908 0.1731 -v 14.2219 14.3174 1.2746 -v 12.4902 12.5857 0.6294 -v 8.2110 8.3065 0.1731 -v 18.4052 8.0672 1.2746 -v 16.1551 7.1098 0.6294 -v 10.5953 4.7442 0.1731 -v -27.7004 -1.9255 27.6095 -v -27.5135 0.3405 27.1448 -v -21.2401 0.3405 27.1920 -v -21.0303 -1.9255 27.6641 -v -32.5963 -1.9255 27.2274 -v -32.1504 0.3405 26.8143 -v -35.6117 -1.9255 26.1903 -v -35.0249 0.3405 25.9174 -v -36.6405 -1.9255 24.1707 -v -36.0110 0.3405 24.1707 -v -28.1115 -2.6809 28.6318 -v -20.5687 -2.6809 28.7027 -v -33.5772 -2.6809 28.1362 -v -36.9027 -2.6809 26.7907 -v -38.0252 -2.6809 24.1707 -v -28.5226 -1.9255 29.6542 -v -20.1071 -1.9255 29.7412 -v -34.5581 -1.9255 29.0449 -v -38.1938 -1.9255 27.3911 -v -39.4100 -1.9255 24.1707 -v -28.7095 0.3405 30.1189 -v -19.8973 0.3405 30.2133 -v -35.0039 0.3405 29.4580 -v -38.7806 0.3405 27.6641 -v -40.0395 0.3405 24.1707 -v -28.5226 2.6065 29.6542 -v -20.1071 2.6065 29.7412 -v -34.5581 2.6065 29.0449 -v -38.1938 2.6065 27.3911 -v -39.4100 2.6065 24.1707 -v -28.1115 3.3618 28.6318 -v -20.5687 3.3618 28.7027 -v -33.5772 3.3618 28.1362 -v -36.9027 3.3618 26.7907 -v -38.0253 3.3618 24.1707 -v -27.7004 2.6065 27.6095 -v -21.0303 2.6065 27.6641 -v -32.5963 2.6065 27.2274 -v -35.6117 2.6065 26.1903 -v -36.6405 2.6065 24.1707 -v -36.0586 -1.9255 21.1683 -v -35.4865 0.3405 21.4326 -v -34.2355 -1.9255 17.7248 -v -33.8290 0.3405 18.1280 -v -31.0551 -1.9255 14.3255 -v -30.9125 0.3405 14.8234 -v -26.4015 -1.9255 11.4559 -v -37.3171 -2.6809 20.5868 -v -35.1298 -2.6809 16.8376 -v -31.3689 -2.6809 13.2301 -v -25.9399 -2.6809 10.0711 -v -38.5757 -1.9255 20.0053 -v -36.0241 -1.9255 15.9505 -v -31.6826 -1.9255 12.1347 -v -25.4783 -1.9255 8.6863 -v -39.1478 0.3405 19.7409 -v -36.4307 0.3405 15.5473 -v -31.8252 0.3405 11.6368 -v -25.2685 0.3405 8.0569 -v -38.5757 2.6065 20.0053 -v -36.0241 2.6065 15.9505 -v -31.6826 2.6065 12.1347 -v -25.4783 2.6065 8.6863 -v -37.3171 3.3618 20.5868 -v -35.1298 3.3618 16.8376 -v -31.3689 3.3618 13.2301 -v -25.9399 3.3618 10.0711 -v -36.0586 2.6065 21.1683 -v -34.2355 2.6065 17.7248 -v -31.0551 2.6065 14.3255 -v -26.4015 2.6065 11.4559 -v 30.0058 -4.1609 19.3308 -v 29.5141 0.3405 20.6143 -v 23.0728 0.3405 19.1351 -v 23.0728 -4.6447 17.4041 -v 32.9341 -3.0963 23.4232 -v 32.3046 0.3405 24.1707 -v 34.6034 -2.0318 28.2119 -v 33.8363 0.3405 28.4823 -v 37.7598 -1.5479 32.2275 -v 36.5009 0.3405 32.2275 -v 31.0877 -5.6613 16.5072 -v 23.0728 -6.3065 13.5960 -v 34.3189 -4.2419 21.7788 -v 36.2911 -2.8225 27.6169 -v 40.5294 -2.1773 32.2275 -v 32.1696 -4.1609 13.6835 -v 23.0728 -4.6447 9.7879 -v 35.7036 -3.0963 20.1343 -v 37.9788 -2.0318 27.0218 -v 43.2989 -1.5479 32.2275 -v 32.6613 0.3405 12.4001 -v 23.0728 0.3405 8.0569 -v 36.3331 0.3405 19.3869 -v 38.7459 0.3405 26.7514 -v 44.5578 0.3405 32.2275 -v 32.1696 4.8418 13.6835 -v 23.0728 5.3257 9.7879 -v 35.7036 3.7772 20.1343 -v 37.9788 2.7127 27.0218 -v 43.2989 2.2288 32.2275 -v 31.0877 6.3422 16.5072 -v 23.0728 6.9874 13.5960 -v 34.3189 4.9228 21.7788 -v 36.2911 3.5034 27.6169 -v 40.5294 2.8582 32.2275 -v 30.0058 4.8418 19.3308 -v 23.0728 5.3257 17.4041 -v 32.9341 3.7772 23.4232 -v 34.6034 2.7127 28.2119 -v 37.7598 2.2288 32.2275 -v 38.8143 -1.4299 32.8217 -v 37.4661 0.3405 32.7940 -v 39.4449 -1.1702 33.0271 -v 38.1794 0.3405 32.9829 -v 39.4637 -0.9106 32.8328 -v 38.3893 0.3405 32.7940 -v 38.6830 -0.7925 32.2275 -v 37.8437 0.3405 32.2275 -v 41.7804 -2.0200 32.8826 -v 42.2289 -1.6738 33.1245 -v 41.8276 -1.3276 32.9180 -v 40.5294 -1.1702 32.2275 -v 44.7465 -1.4299 32.9434 -v 45.0129 -1.1702 33.2219 -v 44.1915 -0.9106 33.0032 -v 42.3757 -0.7925 32.2275 -v 46.0947 0.3405 32.9711 -v 46.2783 0.3405 33.2661 -v 45.2659 0.3405 33.0419 -v 43.2150 0.3405 32.2275 -v 44.7465 2.1108 32.9434 -v 45.0129 1.8511 33.2219 -v 44.1915 1.5915 33.0032 -v 42.3757 1.4735 32.2275 -v 41.7804 2.7009 32.8826 -v 42.2289 2.3547 33.1245 -v 41.8276 2.0085 32.9180 -v 40.5294 1.8511 32.2275 -v 38.8143 2.1108 32.8217 -v 39.4449 1.8511 33.0271 -v 39.4637 1.5915 32.8328 -v 38.6830 1.4735 32.2275 -v 4.4660 -1.4596 41.6377 -v 4.8189 0.3405 41.6377 -v 0.2449 0.3405 42.2986 -v 4.2723 -1.3767 40.0326 -v 4.6091 0.3405 40.0326 -v 2.6843 -0.6988 38.0499 -v 2.8886 0.3405 38.0499 -v 2.7224 -0.7137 36.2560 -v 2.9306 0.3405 36.2560 -v 3.4967 -2.9113 41.6377 -v 3.3473 -2.7619 40.0326 -v 2.1234 -1.5380 38.0499 -v 2.1517 -1.5663 36.2560 -v 2.0450 -3.8806 41.6377 -v 1.9621 -3.6869 40.0326 -v 1.2842 -2.0989 38.0499 -v 1.2991 -2.1370 36.2560 -v 0.2449 -4.2335 41.6377 -v 0.2449 -4.0237 40.0326 -v 0.2449 -2.3032 38.0499 -v 0.2449 -2.3452 36.2560 -v -1.5551 -3.8806 41.6377 -v -1.4722 -3.6869 40.0326 -v -0.7943 -2.0989 38.0499 -v -0.8092 -2.1370 36.2560 -v -3.0068 -2.9113 41.6377 -v -2.8574 -2.7619 40.0326 -v -1.6335 -1.5380 38.0499 -v -1.6618 -1.5663 36.2560 -v -3.9761 -1.4596 41.6377 -v -3.7824 -1.3767 40.0326 -v -2.1944 -0.6988 38.0499 -v -2.2325 -0.7137 36.2560 -v -4.3290 0.3405 41.6377 -v -4.1192 0.3405 40.0326 -v -2.3987 0.3405 38.0499 -v -2.4407 0.3405 36.2560 -v -3.9761 2.1405 41.6377 -v -3.7824 2.0576 40.0326 -v -2.1944 1.3797 38.0499 -v -2.2325 1.3946 36.2560 -v -3.0068 3.5922 41.6377 -v -2.8574 3.4428 40.0326 -v -1.6335 2.2189 38.0499 -v -1.6618 2.2473 36.2560 -v -1.5551 4.5615 41.6377 -v -1.4722 4.3678 40.0326 -v -0.7943 2.7798 38.0499 -v -0.8092 2.8179 36.2560 -v 0.2449 4.9144 41.6377 -v 0.2449 4.7046 40.0326 -v 0.2449 2.9841 38.0499 -v 0.2449 3.0261 36.2560 -v 2.0450 4.5615 41.6377 -v 1.9621 4.3678 40.0326 -v 1.2842 2.7798 38.0499 -v 1.2991 2.8179 36.2560 -v 3.4967 3.5922 41.6377 -v 3.3473 3.4428 40.0326 -v 2.1234 2.2189 38.0499 -v 2.1517 2.2473 36.2560 -v 4.4660 2.1405 41.6377 -v 4.2723 2.0576 40.0326 -v 2.6843 1.3797 38.0499 -v 2.7224 1.3946 36.2560 -v 5.8967 -2.0642 35.0600 -v 6.3715 0.3405 35.0600 -v 10.4646 -4.0077 34.2418 -v 11.3232 0.3405 34.2418 -v 14.5679 -5.7536 33.4235 -v 15.7712 0.3405 33.4235 -v 16.3486 -6.5113 32.2275 -v 17.7015 0.3405 32.2275 -v 4.5948 -4.0094 35.0600 -v 8.1105 -7.5251 34.2418 -v 11.2686 -10.6832 33.4235 -v 12.6391 -12.0537 32.2275 -v 2.6496 -5.3113 35.0600 -v 4.5931 -9.8792 34.2418 -v 6.3390 -13.9825 33.4235 -v 7.0967 -15.7632 32.2275 -v 0.2449 -5.7861 35.0600 -v 0.2449 -10.7378 34.2418 -v 0.2449 -15.1858 33.4235 -v 0.2449 -17.1161 32.2275 -v -2.1597 -5.3113 35.0600 -v -4.1033 -9.8792 34.2418 -v -5.8491 -13.9825 33.4235 -v -6.6068 -15.7632 32.2275 -v -4.1049 -4.0094 35.0600 -v -7.6206 -7.5251 34.2418 -v -10.7787 -10.6832 33.4235 -v -12.1492 -12.0537 32.2275 -v -5.4068 -2.0642 35.0600 -v -9.9747 -4.0077 34.2418 -v -14.0781 -5.7536 33.4235 -v -15.8587 -6.5113 32.2275 -v -5.8816 0.3405 35.0600 -v -10.8333 0.3405 34.2418 -v -15.2813 0.3405 33.4235 -v -17.2116 0.3405 32.2275 -v -5.4068 2.7451 35.0600 -v -9.9747 4.6887 34.2418 -v -14.0781 6.4345 33.4235 -v -15.8587 7.1922 32.2275 -v -4.1049 4.6903 35.0600 -v -7.6206 8.2060 34.2418 -v -10.7787 11.3641 33.4235 -v -12.1492 12.7346 32.2275 -v -2.1597 5.9922 35.0600 -v -4.1033 10.5601 34.2418 -v -5.8491 14.6635 33.4235 -v -6.6068 16.4442 32.2275 -v 0.2449 6.4670 35.0600 -v 0.2449 11.4187 34.2418 -v 0.2449 15.8667 33.4235 -v 0.2449 17.7970 32.2275 -v 2.6496 5.9922 35.0600 -v 4.5931 10.5601 34.2418 -v 6.3390 14.6635 33.4235 -v 7.0967 16.4442 32.2275 -v 4.5948 4.6903 35.0600 -v 8.1105 8.2060 34.2418 -v 11.2686 11.3641 33.4235 -v 12.6391 12.7346 32.2275 -v 5.8967 2.7451 35.0600 -v 10.4646 4.6887 34.2418 -v 14.5679 6.4345 33.4235 -v 16.3486 7.1922 32.2275 -# 529 vertices - -vn -0.8934 0.3691 0.2560 -vn -0.9668 0.0000 0.2554 -vn -0.9667 0.0000 -0.2558 -vn -0.8930 0.3699 -0.2563 -vn -0.0839 0.0355 0.9958 -vn -0.0921 0.0000 0.9958 -vn 0.6297 -0.2604 0.7319 -vn 0.6820 -0.0000 0.7313 -vn 0.8037 -0.3326 0.4934 -vn 0.8703 -0.0000 0.4925 -vn -0.6835 0.6835 0.2561 -vn -0.6834 0.6834 -0.2567 -vn -0.0649 0.0649 0.9958 -vn 0.4814 -0.4814 0.7325 -vn 0.6148 -0.6148 0.4940 -vn -0.3691 0.8934 0.2560 -vn -0.3699 0.8930 -0.2563 -vn -0.0355 0.0839 0.9958 -vn 0.2604 -0.6297 0.7319 -vn 0.3326 -0.8037 0.4934 -vn -0.0019 0.9670 0.2547 -vn -0.0028 0.9662 -0.2579 -vn -0.0003 0.0923 0.9957 -vn 0.0000 -0.6821 0.7313 -vn -0.0000 -0.8703 0.4925 -vn 0.3771 0.9141 0.1491 -vn 0.3791 0.8528 -0.3593 -vn 0.0275 0.1226 0.9921 -vn -0.2610 -0.6354 0.7268 -vn -0.3325 -0.8043 0.4925 -vn 0.7127 0.6976 0.0737 -vn 0.6635 0.6253 -0.4108 -vn 0.0997 0.1220 0.9875 -vn -0.4873 -0.4886 0.7238 -vn -0.6152 -0.6155 0.4926 -vn 0.9173 0.3615 0.1671 -vn 0.8800 0.3387 -0.3329 -vn 0.1136 0.0481 0.9924 -vn -0.6341 -0.2619 0.7275 -vn -0.8041 -0.3327 0.4926 -vn 0.9674 -0.0081 0.2530 -vn 0.9667 -0.0105 -0.2557 -vn 0.0934 -0.0013 0.9956 -vn -0.6822 0.0003 0.7312 -vn -0.8703 0.0001 0.4925 -vn 0.8934 -0.3691 0.2560 -vn 0.8930 -0.3699 -0.2563 -vn 0.0839 -0.0355 0.9958 -vn -0.6297 0.2604 0.7319 -vn -0.8037 0.3326 0.4934 -vn 0.6835 -0.6835 0.2561 -vn 0.6834 -0.6834 -0.2567 -vn 0.0649 -0.0649 0.9958 -vn -0.4814 0.4814 0.7325 -vn -0.6148 0.6148 0.4940 -vn 0.3691 -0.8934 0.2560 -vn 0.3699 -0.8930 -0.2563 -vn 0.0355 -0.0839 0.9958 -vn -0.2604 0.6297 0.7319 -vn -0.3326 0.8037 0.4934 -vn -0.0000 -0.9668 0.2554 -vn -0.0000 -0.9667 -0.2558 -vn -0.0000 -0.0921 0.9958 -vn 0.0000 0.6820 0.7313 -vn 0.0000 0.8703 0.4925 -vn -0.3691 -0.8934 0.2560 -vn -0.3699 -0.8930 -0.2563 -vn -0.0355 -0.0839 0.9958 -vn 0.2604 0.6297 0.7319 -vn 0.3326 0.8037 0.4934 -vn -0.6835 -0.6835 0.2561 -vn -0.6834 -0.6834 -0.2567 -vn -0.0649 -0.0649 0.9958 -vn 0.4814 0.4814 0.7325 -vn 0.6148 0.6148 0.4940 -vn -0.8934 -0.3691 0.2560 -vn -0.8930 -0.3699 -0.2563 -vn -0.0839 -0.0355 0.9958 -vn 0.6297 0.2604 0.7319 -vn 0.8037 0.3326 0.4934 -vn 0.8454 -0.3498 0.4035 -vn 0.9153 -0.0000 0.4027 -vn 0.8700 -0.3600 0.3369 -vn 0.9418 -0.0000 0.3362 -vn 0.9042 -0.3743 0.2058 -vn 0.9787 -0.0000 0.2053 -vn 0.9219 -0.3818 -0.0664 -vn 0.9978 0.0000 -0.0662 -vn 0.6468 -0.6468 0.4041 -vn 0.6657 -0.6657 0.3374 -vn 0.6919 -0.6919 0.2061 -vn 0.7055 -0.7055 -0.0665 -vn 0.3498 -0.8454 0.4035 -vn 0.3600 -0.8700 0.3369 -vn 0.3743 -0.9042 0.2058 -vn 0.3818 -0.9219 -0.0664 -vn -0.0000 -0.9153 0.4027 -vn -0.0000 -0.9418 0.3362 -vn 0.0000 -0.9787 0.2053 -vn -0.0000 -0.9978 -0.0662 -vn -0.3498 -0.8454 0.4035 -vn -0.3600 -0.8700 0.3369 -vn -0.3743 -0.9042 0.2058 -vn -0.3818 -0.9219 -0.0664 -vn -0.6468 -0.6468 0.4041 -vn -0.6657 -0.6657 0.3374 -vn -0.6919 -0.6919 0.2061 -vn -0.7055 -0.7055 -0.0665 -vn -0.8454 -0.3498 0.4035 -vn -0.8700 -0.3600 0.3369 -vn -0.9042 -0.3743 0.2058 -vn -0.9219 -0.3818 -0.0664 -vn -0.9153 0.0000 0.4027 -vn -0.9418 0.0000 0.3362 -vn -0.9787 -0.0000 0.2053 -vn -0.9978 -0.0000 -0.0662 -vn -0.8454 0.3498 0.4035 -vn -0.8700 0.3600 0.3369 -vn -0.9042 0.3743 0.2058 -vn -0.9219 0.3818 -0.0664 -vn -0.6468 0.6468 0.4041 -vn -0.6657 0.6657 0.3374 -vn -0.6919 0.6919 0.2061 -vn -0.7055 0.7055 -0.0665 -vn -0.3498 0.8454 0.4035 -vn -0.3600 0.8700 0.3369 -vn -0.3743 0.9042 0.2058 -vn -0.3818 0.9219 -0.0664 -vn 0.0000 0.9153 0.4027 -vn 0.0000 0.9418 0.3362 -vn -0.0000 0.9787 0.2053 -vn 0.0000 0.9978 -0.0662 -vn 0.3498 0.8454 0.4035 -vn 0.3600 0.8700 0.3369 -vn 0.3743 0.9042 0.2058 -vn 0.3818 0.9219 -0.0664 -vn 0.6468 0.6468 0.4041 -vn 0.6657 0.6657 0.3374 -vn 0.6919 0.6919 0.2061 -vn 0.7055 0.7055 -0.0665 -vn 0.8454 0.3498 0.4035 -vn 0.8700 0.3600 0.3369 -vn 0.9042 0.3743 0.2058 -vn 0.9219 0.3818 -0.0664 -vn 0.8314 -0.3442 -0.4362 -vn 0.9002 0.0000 -0.4355 -vn 0.6735 -0.2786 -0.6847 -vn 0.7296 0.0000 -0.6839 -vn 0.6404 -0.2649 -0.7209 -vn 0.6940 -0.0000 -0.7200 -vn 0.7329 -0.3032 -0.6090 -vn 0.7939 -0.0000 -0.6080 -vn 0.6361 -0.6361 -0.4368 -vn 0.5150 -0.5150 -0.6853 -vn 0.4897 -0.4897 -0.7214 -vn 0.5606 -0.5606 -0.6096 -vn 0.3442 -0.8314 -0.4362 -vn 0.2786 -0.6735 -0.6847 -vn 0.2649 -0.6404 -0.7209 -vn 0.3032 -0.7329 -0.6090 -vn 0.0000 -0.9002 -0.4355 -vn 0.0000 -0.7296 -0.6839 -vn -0.0000 -0.6940 -0.7200 -vn -0.0000 -0.7939 -0.6080 -vn -0.3442 -0.8314 -0.4362 -vn -0.2786 -0.6735 -0.6847 -vn -0.2649 -0.6404 -0.7209 -vn -0.3032 -0.7329 -0.6090 -vn -0.6361 -0.6361 -0.4368 -vn -0.5150 -0.5150 -0.6853 -vn -0.4897 -0.4897 -0.7214 -vn -0.5606 -0.5606 -0.6096 -vn -0.8314 -0.3442 -0.4362 -vn -0.6735 -0.2786 -0.6847 -vn -0.6404 -0.2649 -0.7209 -vn -0.7329 -0.3032 -0.6090 -vn -0.9002 -0.0000 -0.4355 -vn -0.7296 -0.0000 -0.6839 -vn -0.6940 0.0000 -0.7200 -vn -0.7939 0.0000 -0.6080 -vn -0.8314 0.3442 -0.4362 -vn -0.6735 0.2786 -0.6847 -vn -0.6404 0.2649 -0.7209 -vn -0.7329 0.3032 -0.6090 -vn -0.6361 0.6361 -0.4368 -vn -0.5150 0.5150 -0.6853 -vn -0.4897 0.4897 -0.7214 -vn -0.5606 0.5606 -0.6096 -vn -0.3442 0.8314 -0.4362 -vn -0.2786 0.6735 -0.6847 -vn -0.2649 0.6404 -0.7209 -vn -0.3032 0.7329 -0.6090 -vn -0.0000 0.9002 -0.4355 -vn -0.0000 0.7296 -0.6839 -vn 0.0000 0.6940 -0.7200 -vn 0.0000 0.7939 -0.6080 -vn 0.3442 0.8314 -0.4362 -vn 0.2786 0.6735 -0.6847 -vn 0.2649 0.6404 -0.7209 -vn 0.3032 0.7329 -0.6090 -vn 0.6361 0.6361 -0.4368 -vn 0.5150 0.5150 -0.6853 -vn 0.4897 0.4897 -0.7214 -vn 0.5606 0.5606 -0.6096 -vn 0.8314 0.3442 -0.4362 -vn 0.6735 0.2786 -0.6847 -vn 0.6404 0.2649 -0.7209 -vn 0.7329 0.3032 -0.6090 -vn 0.5762 -0.2382 -0.7818 -vn 0.6239 0.0000 -0.7815 -vn 0.1636 -0.0675 -0.9842 -vn 0.1773 0.0000 -0.9842 -vn 0.0454 -0.0187 -0.9988 -vn 0.0492 0.0000 -0.9988 -vn 0.0000 0.0000 -1.0000 -vn 0.4404 -0.4404 -0.7823 -vn 0.1249 -0.1249 -0.9843 -vn 0.0347 -0.0347 -0.9988 -vn 0.2382 -0.5762 -0.7818 -vn 0.0675 -0.1636 -0.9842 -vn 0.0187 -0.0454 -0.9988 -vn 0.0000 -0.6239 -0.7815 -vn 0.0000 -0.1773 -0.9842 -vn 0.0000 -0.0492 -0.9988 -vn -0.2382 -0.5762 -0.7818 -vn -0.0675 -0.1636 -0.9842 -vn -0.0187 -0.0454 -0.9988 -vn -0.4404 -0.4404 -0.7823 -vn -0.1249 -0.1249 -0.9843 -vn -0.0347 -0.0347 -0.9988 -vn -0.5762 -0.2382 -0.7818 -vn -0.1636 -0.0675 -0.9842 -vn -0.0454 -0.0187 -0.9988 -vn -0.6239 -0.0000 -0.7815 -vn -0.1773 -0.0000 -0.9842 -vn -0.0492 -0.0000 -0.9988 -vn -0.5762 0.2382 -0.7818 -vn -0.1636 0.0675 -0.9842 -vn -0.0454 0.0187 -0.9988 -vn -0.4404 0.4404 -0.7823 -vn -0.1249 0.1249 -0.9843 -vn -0.0347 0.0347 -0.9988 -vn -0.2382 0.5762 -0.7818 -vn -0.0675 0.1636 -0.9842 -vn -0.0187 0.0454 -0.9988 -vn -0.0000 0.6239 -0.7815 -vn -0.0000 0.1773 -0.9842 -vn -0.0000 0.0492 -0.9988 -vn 0.2382 0.5762 -0.7818 -vn 0.0675 0.1636 -0.9842 -vn 0.0187 0.0454 -0.9988 -vn 0.4404 0.4404 -0.7823 -vn 0.1249 0.1249 -0.9843 -vn 0.0347 0.0347 -0.9988 -vn 0.5762 0.2382 -0.7818 -vn 0.1636 0.0675 -0.9842 -vn 0.0454 0.0187 -0.9988 -vn 0.0361 -0.5456 -0.8373 -vn 0.0391 0.0010 -0.9992 -vn 0.0078 0.0002 -1.0000 -vn 0.0070 -0.5829 -0.8125 -vn 0.1618 -0.5630 -0.8104 -vn 0.1795 0.0044 -0.9837 -vn 0.4824 -0.6427 -0.5951 -vn 0.6123 0.0105 -0.7906 -vn 0.7387 -0.6642 -0.1146 -vn 0.9862 0.0067 -0.1657 -vn 0.0028 -0.9998 0.0171 -vn -0.0019 -0.9868 0.1621 -vn 0.0105 -0.9972 0.0734 -vn -0.0660 -0.9893 0.1301 -vn -0.0944 -0.9954 0.0166 -vn -0.0486 -0.5395 0.8406 -vn -0.0092 -0.4903 0.8715 -vn -0.2233 -0.5527 0.8029 -vn -0.5964 -0.5751 0.5600 -vn -0.8033 -0.5916 0.0682 -vn -0.0588 -0.0007 0.9983 -vn -0.0106 -0.0001 0.9999 -vn -0.2807 -0.0033 0.9598 -vn -0.7497 -0.0043 0.6617 -vn -0.9974 -0.0021 0.0727 -vn -0.0465 0.5388 0.8412 -vn -0.0088 0.4903 0.8715 -vn -0.2179 0.5492 0.8068 -vn -0.5973 0.5741 0.5600 -vn -0.8040 0.5913 0.0629 -vn 0.0020 0.9999 0.0146 -vn -0.0018 0.9868 0.1617 -vn 0.0092 0.9982 0.0601 -vn -0.0593 0.9917 0.1139 -vn -0.0869 0.9961 0.0123 -vn 0.0338 0.5454 -0.8375 -vn 0.0064 0.5831 -0.8124 -vn 0.1571 0.5622 -0.8119 -vn 0.4844 0.6465 -0.5894 -vn 0.7389 0.6662 -0.1013 -vn 0.7256 -0.6374 0.2594 -vn 0.9465 0.0034 0.3227 -vn 0.6459 -0.6077 0.4620 -vn 0.8258 0.0075 0.5639 -vn 0.5316 -0.5586 0.6367 -vn 0.6500 0.0069 0.7599 -vn 0.4250 -0.5955 0.6817 -vn 0.5324 0.0052 0.8465 -vn -0.0496 -0.9986 -0.0198 -vn -0.0378 -0.9986 -0.0356 -vn -0.0379 -0.9986 -0.0365 -vn -0.1689 -0.9395 -0.2979 -vn -0.7423 -0.5995 -0.2992 -vn -0.6196 -0.5795 -0.5294 -vn -0.4837 -0.5438 -0.6858 -vn -0.4453 -0.4132 -0.7944 -vn -0.9265 -0.0020 -0.3763 -vn -0.7539 -0.0043 -0.6570 -vn -0.5662 -0.0035 -0.8242 -vn -0.4818 -0.0019 -0.8763 -vn -0.7447 0.5990 -0.2944 -vn -0.6219 0.5782 -0.5281 -vn -0.4812 0.5428 -0.6883 -vn -0.4381 0.4157 -0.7970 -vn -0.0443 0.9989 -0.0171 -vn -0.0262 0.9993 -0.0282 -vn -0.0253 0.9993 -0.0283 -vn -0.1575 0.9442 -0.2894 -vn 0.7282 0.6371 0.2524 -vn 0.6471 0.6083 0.4597 -vn 0.5230 0.5622 0.6407 -vn 0.4100 0.6047 0.6829 -vn -0.3167 -0.7021 0.6378 -vn -0.5489 0.0015 0.8359 -vn -0.2308 0.0065 0.9730 -vn -0.1529 -0.7102 0.6872 -vn -0.6011 -0.6453 0.4715 -vn -0.8757 -0.0099 0.4828 -vn -0.6359 -0.6298 0.4461 -vn -0.8776 -0.0191 0.4791 -vn -0.4357 -0.6700 0.6010 -vn -0.6962 -0.0245 0.7174 -vn 0.2233 -0.9747 0.0065 -vn 0.1111 -0.9902 -0.0851 -vn 0.1901 -0.9695 0.1550 -vn 0.0053 -0.9819 0.1895 -vn -0.0118 -0.9690 0.2467 -vn 0.5725 -0.5916 -0.5677 -vn 0.3439 -0.5994 -0.7228 -vn 0.7874 -0.5605 -0.2565 -vn 0.6471 -0.6981 -0.3064 -vn 0.4275 -0.7536 -0.4993 -vn 0.6715 0.0009 -0.7410 -vn 0.4109 -0.0013 -0.9117 -vn 0.9220 0.0073 -0.3871 -vn 0.8469 0.0139 -0.5316 -vn 0.5359 0.0105 -0.8442 -vn 0.5787 0.5918 -0.5611 -vn 0.3412 0.6009 -0.7228 -vn 0.7849 0.5665 -0.2510 -vn 0.6427 0.7040 -0.3023 -vn 0.4186 0.7581 -0.5000 -vn 0.2328 0.9724 0.0126 -vn 0.1158 0.9901 -0.0791 -vn 0.2067 0.9663 0.1536 -vn 0.0245 0.9866 0.1614 -vn 0.0034 0.9775 0.2111 -vn -0.3195 0.7051 0.6331 -vn -0.1349 0.7136 0.6875 -vn -0.6039 0.6499 0.4614 -vn -0.6318 0.6401 0.4372 -vn -0.4243 0.6667 0.6127 -vn -0.2599 -0.5525 0.7919 -vn -0.4258 -0.0108 0.9048 -vn 0.0095 0.0217 0.9997 -vn 0.0220 -0.0016 0.9998 -vn 0.4102 0.8491 0.3329 -vn 0.9996 -0.0116 0.0259 -vn 0.5415 0.6370 -0.5486 -vn 0.7096 -0.0097 -0.7046 -vn 0.0463 -0.8892 0.4552 -vn -0.0107 -0.1489 0.9888 -vn -0.0444 0.7291 0.6829 -vn 0.1228 0.9924 0.0092 -vn 0.4818 -0.8575 -0.1804 -vn 0.4553 -0.4999 0.7367 -vn -0.2205 0.3583 0.9072 -vn -0.2359 0.7158 0.6573 -vn 0.7281 0.0156 -0.6853 -vn 0.8887 0.0167 0.4581 -vn -0.2601 -0.0008 0.9656 -vn -0.3716 0.0044 0.9284 -vn 0.4802 0.8589 -0.1784 -vn 0.4881 0.4980 0.7168 -vn -0.2220 -0.3619 0.9054 -vn -0.2354 -0.7105 0.6632 -vn 0.0587 0.8972 0.4377 -vn 0.0013 0.1640 0.9865 -vn -0.0442 -0.7303 0.6817 -vn 0.1388 -0.9897 -0.0342 -vn -0.2589 0.5454 0.7972 -vn 0.0123 -0.0193 0.9997 -vn 0.3986 -0.8457 0.3549 -vn 0.5376 -0.6107 -0.5814 -vn 0.7626 -0.3148 0.5650 -vn 0.8245 -0.0000 0.5658 -vn -0.0000 -0.0000 1.0000 -vn 0.8480 -0.3500 -0.3980 -vn 0.9177 -0.0000 -0.3973 -vn 0.8641 -0.3564 -0.3553 -vn 0.9353 -0.0001 -0.3539 -vn 0.7210 -0.2979 0.6256 -vn 0.7807 -0.0001 0.6249 -vn 0.5834 -0.5833 0.5652 -vn 0.6485 -0.6484 -0.3987 -vn 0.6609 -0.6607 -0.3559 -vn 0.5519 -0.5518 0.6253 -vn 0.3148 -0.7626 0.5651 -vn 0.3500 -0.8480 -0.3980 -vn 0.3565 -0.8642 -0.3552 -vn 0.2980 -0.7211 0.6255 -vn -0.0000 -0.8245 0.5658 -vn -0.0000 -0.9177 -0.3973 -vn -0.0001 -0.9353 -0.3539 -vn -0.0001 -0.7807 0.6249 -vn -0.3148 -0.7626 0.5650 -vn -0.3500 -0.8480 -0.3980 -vn -0.3564 -0.8641 -0.3553 -vn -0.2979 -0.7210 0.6256 -vn -0.5833 -0.5834 0.5652 -vn -0.6484 -0.6485 -0.3987 -vn -0.6607 -0.6609 -0.3559 -vn -0.5518 -0.5519 0.6253 -vn -0.7626 -0.3148 0.5651 -vn -0.8480 -0.3500 -0.3980 -vn -0.8642 -0.3565 -0.3552 -vn -0.7211 -0.2980 0.6255 -vn -0.8245 0.0000 0.5658 -vn -0.9177 0.0000 -0.3973 -vn -0.9353 0.0001 -0.3539 -vn -0.7807 0.0001 0.6249 -vn -0.7626 0.3148 0.5650 -vn -0.8480 0.3500 -0.3980 -vn -0.8641 0.3564 -0.3553 -vn -0.7210 0.2979 0.6256 -vn -0.5834 0.5833 0.5652 -vn -0.6485 0.6484 -0.3987 -vn -0.6609 0.6607 -0.3559 -vn -0.5519 0.5518 0.6253 -vn -0.3148 0.7626 0.5651 -vn -0.3500 0.8480 -0.3980 -vn -0.3565 0.8642 -0.3552 -vn -0.2980 0.7211 0.6255 -vn 0.0000 0.8245 0.5658 -vn 0.0000 0.9177 -0.3973 -vn 0.0001 0.9353 -0.3539 -vn 0.0001 0.7807 0.6249 -vn 0.3148 0.7626 0.5650 -vn 0.3500 0.8480 -0.3980 -vn 0.3564 0.8641 -0.3553 -vn 0.2979 0.7210 0.6256 -vn 0.5833 0.5834 0.5652 -vn 0.6484 0.6485 -0.3987 -vn 0.6607 0.6609 -0.3559 -vn 0.5518 0.5519 0.6253 -vn 0.7626 0.3148 0.5651 -vn 0.8480 0.3500 -0.3980 -vn 0.8642 0.3565 -0.3552 -vn 0.7211 0.2980 0.6255 -vn 0.2180 -0.0902 0.9718 -vn 0.2366 -0.0000 0.9716 -vn 0.1596 -0.0660 0.9850 -vn 0.1731 -0.0000 0.9849 -vn 0.3505 -0.1447 0.9253 -vn 0.3797 -0.0000 0.9251 -vn 0.4856 -0.2015 0.8507 -vn 0.5267 -0.0000 0.8501 -vn 0.1666 -0.1666 0.9718 -vn 0.1219 -0.1219 0.9850 -vn 0.2677 -0.2677 0.9256 -vn 0.3713 -0.3713 0.8510 -vn 0.0902 -0.2180 0.9718 -vn 0.0660 -0.1596 0.9850 -vn 0.1447 -0.3505 0.9253 -vn 0.2015 -0.4856 0.8507 -vn -0.0000 -0.2366 0.9716 -vn -0.0000 -0.1731 0.9849 -vn -0.0000 -0.3797 0.9251 -vn -0.0000 -0.5267 0.8501 -vn -0.0902 -0.2180 0.9718 -vn -0.0660 -0.1596 0.9850 -vn -0.1447 -0.3505 0.9253 -vn -0.2015 -0.4856 0.8507 -vn -0.1666 -0.1666 0.9718 -vn -0.1219 -0.1219 0.9850 -vn -0.2677 -0.2677 0.9256 -vn -0.3713 -0.3713 0.8510 -vn -0.2180 -0.0902 0.9718 -vn -0.1596 -0.0660 0.9850 -vn -0.3505 -0.1447 0.9253 -vn -0.4856 -0.2015 0.8507 -vn -0.2366 0.0000 0.9716 -vn -0.1731 0.0000 0.9849 -vn -0.3797 0.0000 0.9251 -vn -0.5267 0.0000 0.8501 -vn -0.2180 0.0902 0.9718 -vn -0.1596 0.0660 0.9850 -vn -0.3505 0.1447 0.9253 -vn -0.4856 0.2015 0.8507 -vn -0.1666 0.1666 0.9718 -vn -0.1219 0.1219 0.9850 -vn -0.2677 0.2677 0.9256 -vn -0.3713 0.3713 0.8510 -vn -0.0902 0.2180 0.9718 -vn -0.0660 0.1596 0.9850 -vn -0.1447 0.3505 0.9253 -vn -0.2015 0.4856 0.8507 -vn 0.0000 0.2366 0.9716 -vn 0.0000 0.1731 0.9849 -vn 0.0000 0.3797 0.9251 -vn 0.0000 0.5267 0.8501 -vn 0.0902 0.2180 0.9718 -vn 0.0660 0.1596 0.9850 -vn 0.1447 0.3505 0.9253 -vn 0.2015 0.4856 0.8507 -vn 0.1666 0.1666 0.9718 -vn 0.1219 0.1219 0.9850 -vn 0.2677 0.2677 0.9256 -vn 0.3713 0.3713 0.8510 -vn 0.2180 0.0902 0.9718 -vn 0.1596 0.0660 0.9850 -vn 0.3505 0.1447 0.9253 -vn 0.4856 0.2015 0.8507 -# 530 vertex normals - -vt 1.7500 1.9750 0.0000 -vt 2.0000 1.9750 0.0000 -vt 2.0000 2.0000 0.0000 -vt 1.7500 2.0000 0.0000 -vt 1.7500 1.9500 0.0000 -vt 2.0000 1.9500 0.0000 -vt 1.7500 1.9250 0.0000 -vt 2.0000 1.9250 0.0000 -vt 1.7500 1.9000 0.0000 -vt 2.0000 1.9000 0.0000 -vt 1.5000 1.9750 0.0000 -vt 1.5000 2.0000 0.0000 -vt 1.5000 1.9500 0.0000 -vt 1.5000 1.9250 0.0000 -vt 1.5000 1.9000 0.0000 -vt 1.2500 1.9750 0.0000 -vt 1.2500 2.0000 0.0000 -vt 1.2500 1.9500 0.0000 -vt 1.2500 1.9250 0.0000 -vt 1.2500 1.9000 0.0000 -vt 1.0000 1.9750 0.0000 -vt 1.0000 2.0000 0.0000 -vt 1.0000 1.9500 0.0000 -vt 1.0000 1.9250 0.0000 -vt 1.0000 1.9000 0.0000 -vt 0.7500 1.9750 0.0000 -vt 0.7500 2.0000 0.0000 -vt 0.7500 1.9500 0.0000 -vt 0.7500 1.9250 0.0000 -vt 0.7500 1.9000 0.0000 -vt 0.5000 1.9750 0.0000 -vt 0.5000 2.0000 0.0000 -vt 0.5000 1.9500 0.0000 -vt 0.5000 1.9250 0.0000 -vt 0.5000 1.9000 0.0000 -vt 0.2500 1.9750 0.0000 -vt 0.2500 2.0000 0.0000 -vt 0.2500 1.9500 0.0000 -vt 0.2500 1.9250 0.0000 -vt 0.2500 1.9000 0.0000 -vt 0.0000 1.9750 0.0000 -vt 0.0000 2.0000 0.0000 -vt 0.0000 1.9500 0.0000 -vt 0.0000 1.9250 0.0000 -vt 0.0000 1.9000 0.0000 -vt 1.7500 1.6750 0.0000 -vt 2.0000 1.6750 0.0000 -vt 1.7500 1.4500 0.0000 -vt 2.0000 1.4500 0.0000 -vt 1.7500 1.2250 0.0000 -vt 2.0000 1.2250 0.0000 -vt 1.7500 1.0000 0.0000 -vt 2.0000 1.0000 0.0000 -vt 1.5000 1.6750 0.0000 -vt 1.5000 1.4500 0.0000 -vt 1.5000 1.2250 0.0000 -vt 1.5000 1.0000 0.0000 -vt 1.2500 1.6750 0.0000 -vt 1.2500 1.4500 0.0000 -vt 1.2500 1.2250 0.0000 -vt 1.2500 1.0000 0.0000 -vt 1.0000 1.6750 0.0000 -vt 1.0000 1.4500 0.0000 -vt 1.0000 1.2250 0.0000 -vt 1.0000 1.0000 0.0000 -vt 0.7500 1.6750 0.0000 -vt 0.7500 1.4500 0.0000 -vt 0.7500 1.2250 0.0000 -vt 0.7500 1.0000 0.0000 -vt 0.5000 1.6750 0.0000 -vt 0.5000 1.4500 0.0000 -vt 0.5000 1.2250 0.0000 -vt 0.5000 1.0000 0.0000 -vt 0.2500 1.6750 0.0000 -vt 0.2500 1.4500 0.0000 -vt 0.2500 1.2250 0.0000 -vt 0.2500 1.0000 0.0000 -vt 0.0000 1.6750 0.0000 -vt 0.0000 1.4500 0.0000 -vt 0.0000 1.2250 0.0000 -vt 0.0000 1.0000 0.0000 -vt 1.7500 0.8500 0.0000 -vt 2.0000 0.8500 0.0000 -vt 1.7500 0.7000 0.0000 -vt 2.0000 0.7000 0.0000 -vt 1.7500 0.5500 0.0000 -vt 2.0000 0.5500 0.0000 -vt 1.7500 0.4000 0.0000 -vt 2.0000 0.4000 0.0000 -vt 1.5000 0.8500 0.0000 -vt 1.5000 0.7000 0.0000 -vt 1.5000 0.5500 0.0000 -vt 1.5000 0.4000 0.0000 -vt 1.2500 0.8500 0.0000 -vt 1.2500 0.7000 0.0000 -vt 1.2500 0.5500 0.0000 -vt 1.2500 0.4000 0.0000 -vt 1.0000 0.8500 0.0000 -vt 1.0000 0.7000 0.0000 -vt 1.0000 0.5500 0.0000 -vt 1.0000 0.4000 0.0000 -vt 0.7500 0.8500 0.0000 -vt 0.7500 0.7000 0.0000 -vt 0.7500 0.5500 0.0000 -vt 0.7500 0.4000 0.0000 -vt 0.5000 0.8500 0.0000 -vt 0.5000 0.7000 0.0000 -vt 0.5000 0.5500 0.0000 -vt 0.5000 0.4000 0.0000 -vt 0.2500 0.8500 0.0000 -vt 0.2500 0.7000 0.0000 -vt 0.2500 0.5500 0.0000 -vt 0.2500 0.4000 0.0000 -vt 0.0000 0.8500 0.0000 -vt 0.0000 0.7000 0.0000 -vt 0.0000 0.5500 0.0000 -vt 0.0000 0.4000 0.0000 -vt 1.7500 0.3000 0.0000 -vt 2.0000 0.3000 0.0000 -vt 1.7500 0.2000 0.0000 -vt 2.0000 0.2000 0.0000 -vt 1.7500 0.1000 0.0000 -vt 2.0000 0.1000 0.0000 -vt 1.7500 0.0000 0.0000 -vt 1.5000 0.3000 0.0000 -vt 1.5000 0.2000 0.0000 -vt 1.5000 0.1000 0.0000 -vt 1.5000 0.0000 0.0000 -vt 1.2500 0.3000 0.0000 -vt 1.2500 0.2000 0.0000 -vt 1.2500 0.1000 0.0000 -vt 1.2500 0.0000 0.0000 -vt 1.0000 0.3000 0.0000 -vt 1.0000 0.2000 0.0000 -vt 1.0000 0.1000 0.0000 -vt 1.0000 0.0000 0.0000 -vt 0.7500 0.3000 0.0000 -vt 0.7500 0.2000 0.0000 -vt 0.7500 0.1000 0.0000 -vt 0.7500 0.0000 0.0000 -vt 0.5000 0.3000 0.0000 -vt 0.5000 0.2000 0.0000 -vt 0.5000 0.1000 0.0000 -vt 0.5000 0.0000 0.0000 -vt 0.2500 0.3000 0.0000 -vt 0.2500 0.2000 0.0000 -vt 0.2500 0.1000 0.0000 -vt 0.2500 0.0000 0.0000 -vt 0.0000 0.3000 0.0000 -vt 0.0000 0.2000 0.0000 -vt 0.0000 0.1000 0.0000 -vt 0.0000 0.0000 0.0000 -vt 0.8750 0.8750 0.0000 -vt 1.0000 0.8750 0.0000 -vt 0.8750 1.0000 0.0000 -vt 0.8750 0.7500 0.0000 -vt 1.0000 0.7500 0.0000 -vt 0.8750 0.6250 0.0000 -vt 1.0000 0.6250 0.0000 -vt 0.8750 0.5000 0.0000 -vt 1.0000 0.5000 0.0000 -vt 0.7500 0.8750 0.0000 -vt 0.7500 0.7500 0.0000 -vt 0.7500 0.6250 0.0000 -vt 0.7500 0.5000 0.0000 -vt 0.6250 0.8750 0.0000 -vt 0.6250 1.0000 0.0000 -vt 0.6250 0.7500 0.0000 -vt 0.6250 0.6250 0.0000 -vt 0.6250 0.5000 0.0000 -vt 0.5000 0.8750 0.0000 -vt 0.5000 0.7500 0.0000 -vt 0.5000 0.6250 0.0000 -vt 0.5000 0.5000 0.0000 -vt 0.3750 0.8750 0.0000 -vt 0.3750 1.0000 0.0000 -vt 0.3750 0.7500 0.0000 -vt 0.3750 0.6250 0.0000 -vt 0.3750 0.5000 0.0000 -vt 0.2500 0.8750 0.0000 -vt 0.2500 0.7500 0.0000 -vt 0.2500 0.6250 0.0000 -vt 0.2500 0.5000 0.0000 -vt 0.1250 0.8750 0.0000 -vt 0.1250 1.0000 0.0000 -vt 0.1250 0.7500 0.0000 -vt 0.1250 0.6250 0.0000 -vt 0.1250 0.5000 0.0000 -vt 0.0000 0.8750 0.0000 -vt 0.0000 0.7500 0.0000 -vt 0.0000 0.6250 0.0000 -vt 0.0000 0.5000 0.0000 -vt 0.8750 0.3750 0.0000 -vt 1.0000 0.3750 0.0000 -vt 0.8750 0.2500 0.0000 -vt 1.0000 0.2500 0.0000 -vt 0.8750 0.1250 0.0000 -vt 1.0000 0.1250 0.0000 -vt 0.8750 0.0000 0.0000 -vt 0.7500 0.3750 0.0000 -vt 0.7500 0.2500 0.0000 -vt 0.7500 0.1250 0.0000 -vt 0.6250 0.3750 0.0000 -vt 0.6250 0.2500 0.0000 -vt 0.6250 0.1250 0.0000 -vt 0.6250 0.0000 0.0000 -vt 0.5000 0.3750 0.0000 -vt 0.5000 0.2500 0.0000 -vt 0.5000 0.1250 0.0000 -vt 0.3750 0.3750 0.0000 -vt 0.3750 0.2500 0.0000 -vt 0.3750 0.1250 0.0000 -vt 0.3750 0.0000 0.0000 -vt 0.2500 0.3750 0.0000 -vt 0.2500 0.2500 0.0000 -vt 0.2500 0.1250 0.0000 -vt 0.1250 0.3750 0.0000 -vt 0.1250 0.2500 0.0000 -vt 0.1250 0.1250 0.0000 -vt 0.1250 0.0000 0.0000 -vt 0.0000 0.3750 0.0000 -vt 0.0000 0.2500 0.0000 -vt 0.0000 0.1250 0.0000 -vt 0.6250 0.2250 0.0000 -vt 0.5000 0.2250 0.0000 -vt 0.6250 0.4500 0.0000 -vt 0.5000 0.4500 0.0000 -vt 0.6250 0.6750 0.0000 -vt 0.5000 0.6750 0.0000 -vt 0.6250 0.9000 0.0000 -vt 0.5000 0.9000 0.0000 -vt 0.7500 0.2250 0.0000 -vt 0.7500 0.4500 0.0000 -vt 0.7500 0.6750 0.0000 -vt 0.7500 0.9000 0.0000 -vt 0.8750 0.2250 0.0000 -vt 0.8750 0.4500 0.0000 -vt 0.8750 0.6750 0.0000 -vt 0.8750 0.9000 0.0000 -vt 1.0000 0.2250 0.0000 -vt 1.0000 0.4500 0.0000 -vt 1.0000 0.6750 0.0000 -vt 1.0000 0.9000 0.0000 -vt 0.1250 0.2250 0.0000 -vt 0.0000 0.2250 0.0000 -vt 0.1250 0.4500 0.0000 -vt 0.0000 0.4500 0.0000 -vt 0.1250 0.6750 0.0000 -vt 0.0000 0.6750 0.0000 -vt 0.1250 0.9000 0.0000 -vt 0.0000 0.9000 0.0000 -vt 0.2500 0.2250 0.0000 -vt 0.2500 0.4500 0.0000 -vt 0.2500 0.6750 0.0000 -vt 0.2500 0.9000 0.0000 -vt 0.3750 0.2250 0.0000 -vt 0.3750 0.4500 0.0000 -vt 0.3750 0.6750 0.0000 -vt 0.3750 0.9000 0.0000 -vt 0.6250 0.9250 0.0000 -vt 0.5000 0.9250 0.0000 -vt 0.6250 0.9500 0.0000 -vt 0.5000 0.9500 0.0000 -vt 0.6250 0.9750 0.0000 -vt 0.5000 0.9750 0.0000 -vt 0.7500 0.9250 0.0000 -vt 0.7500 0.9500 0.0000 -vt 0.7500 0.9750 0.0000 -vt 0.8750 0.9250 0.0000 -vt 0.8750 0.9500 0.0000 -vt 0.8750 0.9750 0.0000 -vt 1.0000 0.9250 0.0000 -vt 1.0000 0.9500 0.0000 -vt 1.0000 0.9750 0.0000 -vt 0.1250 0.9250 0.0000 -vt 0.0000 0.9250 0.0000 -vt 0.1250 0.9500 0.0000 -vt 0.0000 0.9500 0.0000 -vt 0.1250 0.9750 0.0000 -vt 0.0000 0.9750 0.0000 -vt 0.2500 0.9250 0.0000 -vt 0.2500 0.9500 0.0000 -vt 0.2500 0.9750 0.0000 -vt 0.3750 0.9250 0.0000 -vt 0.3750 0.9500 0.0000 -vt 0.3750 0.9750 0.0000 -# 286 texture coords - -g Teapot001 -s 1 -f 1/1/1 2/2/2 3/3/3 -f 3/3/3 4/4/4 1/1/1 -f 5/5/5 6/6/6 2/2/2 -f 2/2/2 1/1/1 5/5/5 -f 7/7/7 8/8/8 6/6/6 -f 6/6/6 5/5/5 7/7/7 -f 9/9/9 10/10/10 8/8/8 -f 8/8/8 7/7/7 9/9/9 -f 11/11/11 1/1/1 4/4/4 -f 4/4/4 12/12/12 11/11/11 -f 13/13/13 5/5/5 1/1/1 -f 1/1/1 11/11/11 13/13/13 -f 14/14/14 7/7/7 5/5/5 -f 5/5/5 13/13/13 14/14/14 -f 15/15/15 9/9/9 7/7/7 -f 7/7/7 14/14/14 15/15/15 -f 16/16/16 11/11/11 12/12/12 -f 12/12/12 17/17/17 16/16/16 -f 18/18/18 13/13/13 11/11/11 -f 11/11/11 16/16/16 18/18/18 -f 19/19/19 14/14/14 13/13/13 -f 13/13/13 18/18/18 19/19/19 -f 20/20/20 15/15/15 14/14/14 -f 14/14/14 19/19/19 20/20/20 -f 21/21/21 16/16/16 17/17/17 -f 17/17/17 22/22/22 21/21/21 -f 23/23/23 18/18/18 16/16/16 -f 16/16/16 21/21/21 23/23/23 -f 24/24/24 19/19/19 18/18/18 -f 18/18/18 23/23/23 24/24/24 -f 25/25/25 20/20/20 19/19/19 -f 19/19/19 24/24/24 25/25/25 -f 26/26/26 21/21/21 22/22/22 -f 22/22/22 27/27/27 26/26/26 -f 28/28/28 23/23/23 21/21/21 -f 21/21/21 26/26/26 28/28/28 -f 29/29/29 24/24/24 23/23/23 -f 23/23/23 28/28/28 29/29/29 -f 30/30/30 25/25/25 24/24/24 -f 24/24/24 29/29/29 30/30/30 -f 31/31/31 26/26/26 27/27/27 -f 27/27/27 32/32/32 31/31/31 -f 33/33/33 28/28/28 26/26/26 -f 26/26/26 31/31/31 33/33/33 -f 34/34/34 29/29/29 28/28/28 -f 28/28/28 33/33/33 34/34/34 -f 35/35/35 30/30/30 29/29/29 -f 29/29/29 34/34/34 35/35/35 -f 36/36/36 31/31/31 32/32/32 -f 32/32/32 37/37/37 36/36/36 -f 38/38/38 33/33/33 31/31/31 -f 31/31/31 36/36/36 38/38/38 -f 39/39/39 34/34/34 33/33/33 -f 33/33/33 38/38/38 39/39/39 -f 40/40/40 35/35/35 34/34/34 -f 34/34/34 39/39/39 40/40/40 -f 41/41/41 36/36/36 37/37/37 -f 37/37/37 42/42/42 41/41/41 -f 43/43/43 38/38/38 36/36/36 -f 36/36/36 41/41/41 43/43/43 -f 44/44/44 39/39/39 38/38/38 -f 38/38/38 43/43/43 44/44/44 -f 45/45/45 40/40/40 39/39/39 -f 39/39/39 44/44/44 45/45/45 -f 46/1/46 41/2/41 42/3/42 -f 42/3/42 47/4/47 46/1/46 -f 48/5/48 43/6/43 41/2/41 -f 41/2/41 46/1/46 48/5/48 -f 49/7/49 44/8/44 43/6/43 -f 43/6/43 48/5/48 49/7/49 -f 50/9/50 45/10/45 44/8/44 -f 44/8/44 49/7/49 50/9/50 -f 51/11/51 46/1/46 47/4/47 -f 47/4/47 52/12/52 51/11/51 -f 53/13/53 48/5/48 46/1/46 -f 46/1/46 51/11/51 53/13/53 -f 54/14/54 49/7/49 48/5/48 -f 48/5/48 53/13/53 54/14/54 -f 55/15/55 50/9/50 49/7/49 -f 49/7/49 54/14/54 55/15/55 -f 56/16/56 51/11/51 52/12/52 -f 52/12/52 57/17/57 56/16/56 -f 58/18/58 53/13/53 51/11/51 -f 51/11/51 56/16/56 58/18/58 -f 59/19/59 54/14/54 53/13/53 -f 53/13/53 58/18/58 59/19/59 -f 60/20/60 55/15/55 54/14/54 -f 54/14/54 59/19/59 60/20/60 -f 61/21/61 56/16/56 57/17/57 -f 57/17/57 62/22/62 61/21/61 -f 63/23/63 58/18/58 56/16/56 -f 56/16/56 61/21/61 63/23/63 -f 64/24/64 59/19/59 58/18/58 -f 58/18/58 63/23/63 64/24/64 -f 65/25/65 60/20/60 59/19/59 -f 59/19/59 64/24/64 65/25/65 -f 66/26/66 61/21/61 62/22/62 -f 62/22/62 67/27/67 66/26/66 -f 68/28/68 63/23/63 61/21/61 -f 61/21/61 66/26/66 68/28/68 -f 69/29/69 64/24/64 63/23/63 -f 63/23/63 68/28/68 69/29/69 -f 70/30/70 65/25/65 64/24/64 -f 64/24/64 69/29/69 70/30/70 -f 71/31/71 66/26/66 67/27/67 -f 67/27/67 72/32/72 71/31/71 -f 73/33/73 68/28/68 66/26/66 -f 66/26/66 71/31/71 73/33/73 -f 74/34/74 69/29/69 68/28/68 -f 68/28/68 73/33/73 74/34/74 -f 75/35/75 70/30/70 69/29/69 -f 69/29/69 74/34/74 75/35/75 -f 76/36/76 71/31/71 72/32/72 -f 72/32/72 77/37/77 76/36/76 -f 78/38/78 73/33/73 71/31/71 -f 71/31/71 76/36/76 78/38/78 -f 79/39/79 74/34/74 73/33/73 -f 73/33/73 78/38/78 79/39/79 -f 80/40/80 75/35/75 74/34/74 -f 74/34/74 79/39/79 80/40/80 -f 2/41/2 76/36/76 77/37/77 -f 77/37/77 3/42/3 2/41/2 -f 6/43/6 78/38/78 76/36/76 -f 76/36/76 2/41/2 6/43/6 -f 8/44/8 79/39/79 78/38/78 -f 78/38/78 6/43/6 8/44/8 -f 10/45/10 80/40/80 79/39/79 -f 79/39/79 8/44/8 10/45/10 -f 81/46/81 82/47/82 10/10/10 -f 10/10/10 9/9/9 81/46/81 -f 83/48/83 84/49/84 82/47/82 -f 82/47/82 81/46/81 83/48/83 -f 85/50/85 86/51/86 84/49/84 -f 84/49/84 83/48/83 85/50/85 -f 87/52/87 88/53/88 86/51/86 -f 86/51/86 85/50/85 87/52/87 -f 89/54/89 81/46/81 9/9/9 -f 9/9/9 15/15/15 89/54/89 -f 90/55/90 83/48/83 81/46/81 -f 81/46/81 89/54/89 90/55/90 -f 91/56/91 85/50/85 83/48/83 -f 83/48/83 90/55/90 91/56/91 -f 92/57/92 87/52/87 85/50/85 -f 85/50/85 91/56/91 92/57/92 -f 93/58/93 89/54/89 15/15/15 -f 15/15/15 20/20/20 93/58/93 -f 94/59/94 90/55/90 89/54/89 -f 89/54/89 93/58/93 94/59/94 -f 95/60/95 91/56/91 90/55/90 -f 90/55/90 94/59/94 95/60/95 -f 96/61/96 92/57/92 91/56/91 -f 91/56/91 95/60/95 96/61/96 -f 97/62/97 93/58/93 20/20/20 -f 20/20/20 25/25/25 97/62/97 -f 98/63/98 94/59/94 93/58/93 -f 93/58/93 97/62/97 98/63/98 -f 99/64/99 95/60/95 94/59/94 -f 94/59/94 98/63/98 99/64/99 -f 100/65/100 96/61/96 95/60/95 -f 95/60/95 99/64/99 100/65/100 -f 101/66/101 97/62/97 25/25/25 -f 25/25/25 30/30/30 101/66/101 -f 102/67/102 98/63/98 97/62/97 -f 97/62/97 101/66/101 102/67/102 -f 103/68/103 99/64/99 98/63/98 -f 98/63/98 102/67/102 103/68/103 -f 104/69/104 100/65/100 99/64/99 -f 99/64/99 103/68/103 104/69/104 -f 105/70/105 101/66/101 30/30/30 -f 30/30/30 35/35/35 105/70/105 -f 106/71/106 102/67/102 101/66/101 -f 101/66/101 105/70/105 106/71/106 -f 107/72/107 103/68/103 102/67/102 -f 102/67/102 106/71/106 107/72/107 -f 108/73/108 104/69/104 103/68/103 -f 103/68/103 107/72/107 108/73/108 -f 109/74/109 105/70/105 35/35/35 -f 35/35/35 40/40/40 109/74/109 -f 110/75/110 106/71/106 105/70/105 -f 105/70/105 109/74/109 110/75/110 -f 111/76/111 107/72/107 106/71/106 -f 106/71/106 110/75/110 111/76/111 -f 112/77/112 108/73/108 107/72/107 -f 107/72/107 111/76/111 112/77/112 -f 113/78/113 109/74/109 40/40/40 -f 40/40/40 45/45/45 113/78/113 -f 114/79/114 110/75/110 109/74/109 -f 109/74/109 113/78/113 114/79/114 -f 115/80/115 111/76/111 110/75/110 -f 110/75/110 114/79/114 115/80/115 -f 116/81/116 112/77/112 111/76/111 -f 111/76/111 115/80/115 116/81/116 -f 117/46/117 113/47/113 45/10/45 -f 45/10/45 50/9/50 117/46/117 -f 118/48/118 114/49/114 113/47/113 -f 113/47/113 117/46/117 118/48/118 -f 119/50/119 115/51/115 114/49/114 -f 114/49/114 118/48/118 119/50/119 -f 120/52/120 116/53/116 115/51/115 -f 115/51/115 119/50/119 120/52/120 -f 121/54/121 117/46/117 50/9/50 -f 50/9/50 55/15/55 121/54/121 -f 122/55/122 118/48/118 117/46/117 -f 117/46/117 121/54/121 122/55/122 -f 123/56/123 119/50/119 118/48/118 -f 118/48/118 122/55/122 123/56/123 -f 124/57/124 120/52/120 119/50/119 -f 119/50/119 123/56/123 124/57/124 -f 125/58/125 121/54/121 55/15/55 -f 55/15/55 60/20/60 125/58/125 -f 126/59/126 122/55/122 121/54/121 -f 121/54/121 125/58/125 126/59/126 -f 127/60/127 123/56/123 122/55/122 -f 122/55/122 126/59/126 127/60/127 -f 128/61/128 124/57/124 123/56/123 -f 123/56/123 127/60/127 128/61/128 -f 129/62/129 125/58/125 60/20/60 -f 60/20/60 65/25/65 129/62/129 -f 130/63/130 126/59/126 125/58/125 -f 125/58/125 129/62/129 130/63/130 -f 131/64/131 127/60/127 126/59/126 -f 126/59/126 130/63/130 131/64/131 -f 132/65/132 128/61/128 127/60/127 -f 127/60/127 131/64/131 132/65/132 -f 133/66/133 129/62/129 65/25/65 -f 65/25/65 70/30/70 133/66/133 -f 134/67/134 130/63/130 129/62/129 -f 129/62/129 133/66/133 134/67/134 -f 135/68/135 131/64/131 130/63/130 -f 130/63/130 134/67/134 135/68/135 -f 136/69/136 132/65/132 131/64/131 -f 131/64/131 135/68/135 136/69/136 -f 137/70/137 133/66/133 70/30/70 -f 70/30/70 75/35/75 137/70/137 -f 138/71/138 134/67/134 133/66/133 -f 133/66/133 137/70/137 138/71/138 -f 139/72/139 135/68/135 134/67/134 -f 134/67/134 138/71/138 139/72/139 -f 140/73/140 136/69/136 135/68/135 -f 135/68/135 139/72/139 140/73/140 -f 141/74/141 137/70/137 75/35/75 -f 75/35/75 80/40/80 141/74/141 -f 142/75/142 138/71/138 137/70/137 -f 137/70/137 141/74/141 142/75/142 -f 143/76/143 139/72/139 138/71/138 -f 138/71/138 142/75/142 143/76/143 -f 144/77/144 140/73/140 139/72/139 -f 139/72/139 143/76/143 144/77/144 -f 82/78/82 141/74/141 80/40/80 -f 80/40/80 10/45/10 82/78/82 -f 84/79/84 142/75/142 141/74/141 -f 141/74/141 82/78/82 84/79/84 -f 86/80/86 143/76/143 142/75/142 -f 142/75/142 84/79/84 86/80/86 -f 88/81/88 144/77/144 143/76/143 -f 143/76/143 86/80/86 88/81/88 -f 145/82/145 146/83/146 88/53/88 -f 88/53/88 87/52/87 145/82/145 -f 147/84/147 148/85/148 146/83/146 -f 146/83/146 145/82/145 147/84/147 -f 149/86/149 150/87/150 148/85/148 -f 148/85/148 147/84/147 149/86/149 -f 151/88/151 152/89/152 150/87/150 -f 150/87/150 149/86/149 151/88/151 -f 153/90/153 145/82/145 87/52/87 -f 87/52/87 92/57/92 153/90/153 -f 154/91/154 147/84/147 145/82/145 -f 145/82/145 153/90/153 154/91/154 -f 155/92/155 149/86/149 147/84/147 -f 147/84/147 154/91/154 155/92/155 -f 156/93/156 151/88/151 149/86/149 -f 149/86/149 155/92/155 156/93/156 -f 157/94/157 153/90/153 92/57/92 -f 92/57/92 96/61/96 157/94/157 -f 158/95/158 154/91/154 153/90/153 -f 153/90/153 157/94/157 158/95/158 -f 159/96/159 155/92/155 154/91/154 -f 154/91/154 158/95/158 159/96/159 -f 160/97/160 156/93/156 155/92/155 -f 155/92/155 159/96/159 160/97/160 -f 161/98/161 157/94/157 96/61/96 -f 96/61/96 100/65/100 161/98/161 -f 162/99/162 158/95/158 157/94/157 -f 157/94/157 161/98/161 162/99/162 -f 163/100/163 159/96/159 158/95/158 -f 158/95/158 162/99/162 163/100/163 -f 164/101/164 160/97/160 159/96/159 -f 159/96/159 163/100/163 164/101/164 -f 165/102/165 161/98/161 100/65/100 -f 100/65/100 104/69/104 165/102/165 -f 166/103/166 162/99/162 161/98/161 -f 161/98/161 165/102/165 166/103/166 -f 167/104/167 163/100/163 162/99/162 -f 162/99/162 166/103/166 167/104/167 -f 168/105/168 164/101/164 163/100/163 -f 163/100/163 167/104/167 168/105/168 -f 169/106/169 165/102/165 104/69/104 -f 104/69/104 108/73/108 169/106/169 -f 170/107/170 166/103/166 165/102/165 -f 165/102/165 169/106/169 170/107/170 -f 171/108/171 167/104/167 166/103/166 -f 166/103/166 170/107/170 171/108/171 -f 172/109/172 168/105/168 167/104/167 -f 167/104/167 171/108/171 172/109/172 -f 173/110/173 169/106/169 108/73/108 -f 108/73/108 112/77/112 173/110/173 -f 174/111/174 170/107/170 169/106/169 -f 169/106/169 173/110/173 174/111/174 -f 175/112/175 171/108/171 170/107/170 -f 170/107/170 174/111/174 175/112/175 -f 176/113/176 172/109/172 171/108/171 -f 171/108/171 175/112/175 176/113/176 -f 177/114/177 173/110/173 112/77/112 -f 112/77/112 116/81/116 177/114/177 -f 178/115/178 174/111/174 173/110/173 -f 173/110/173 177/114/177 178/115/178 -f 179/116/179 175/112/175 174/111/174 -f 174/111/174 178/115/178 179/116/179 -f 180/117/180 176/113/176 175/112/175 -f 175/112/175 179/116/179 180/117/180 -f 181/82/181 177/83/177 116/53/116 -f 116/53/116 120/52/120 181/82/181 -f 182/84/182 178/85/178 177/83/177 -f 177/83/177 181/82/181 182/84/182 -f 183/86/183 179/87/179 178/85/178 -f 178/85/178 182/84/182 183/86/183 -f 184/88/184 180/89/180 179/87/179 -f 179/87/179 183/86/183 184/88/184 -f 185/90/185 181/82/181 120/52/120 -f 120/52/120 124/57/124 185/90/185 -f 186/91/186 182/84/182 181/82/181 -f 181/82/181 185/90/185 186/91/186 -f 187/92/187 183/86/183 182/84/182 -f 182/84/182 186/91/186 187/92/187 -f 188/93/188 184/88/184 183/86/183 -f 183/86/183 187/92/187 188/93/188 -f 189/94/189 185/90/185 124/57/124 -f 124/57/124 128/61/128 189/94/189 -f 190/95/190 186/91/186 185/90/185 -f 185/90/185 189/94/189 190/95/190 -f 191/96/191 187/92/187 186/91/186 -f 186/91/186 190/95/190 191/96/191 -f 192/97/192 188/93/188 187/92/187 -f 187/92/187 191/96/191 192/97/192 -f 193/98/193 189/94/189 128/61/128 -f 128/61/128 132/65/132 193/98/193 -f 194/99/194 190/95/190 189/94/189 -f 189/94/189 193/98/193 194/99/194 -f 195/100/195 191/96/191 190/95/190 -f 190/95/190 194/99/194 195/100/195 -f 196/101/196 192/97/192 191/96/191 -f 191/96/191 195/100/195 196/101/196 -f 197/102/197 193/98/193 132/65/132 -f 132/65/132 136/69/136 197/102/197 -f 198/103/198 194/99/194 193/98/193 -f 193/98/193 197/102/197 198/103/198 -f 199/104/199 195/100/195 194/99/194 -f 194/99/194 198/103/198 199/104/199 -f 200/105/200 196/101/196 195/100/195 -f 195/100/195 199/104/199 200/105/200 -f 201/106/201 197/102/197 136/69/136 -f 136/69/136 140/73/140 201/106/201 -f 202/107/202 198/103/198 197/102/197 -f 197/102/197 201/106/201 202/107/202 -f 203/108/203 199/104/199 198/103/198 -f 198/103/198 202/107/202 203/108/203 -f 204/109/204 200/105/200 199/104/199 -f 199/104/199 203/108/203 204/109/204 -f 205/110/205 201/106/201 140/73/140 -f 140/73/140 144/77/144 205/110/205 -f 206/111/206 202/107/202 201/106/201 -f 201/106/201 205/110/205 206/111/206 -f 207/112/207 203/108/203 202/107/202 -f 202/107/202 206/111/206 207/112/207 -f 208/113/208 204/109/204 203/108/203 -f 203/108/203 207/112/207 208/113/208 -f 146/114/146 205/110/205 144/77/144 -f 144/77/144 88/81/88 146/114/146 -f 148/115/148 206/111/206 205/110/205 -f 205/110/205 146/114/146 148/115/148 -f 150/116/150 207/112/207 206/111/206 -f 206/111/206 148/115/148 150/116/150 -f 152/117/152 208/113/208 207/112/207 -f 207/112/207 150/116/150 152/117/152 -f 209/118/209 210/119/210 152/89/152 -f 152/89/152 151/88/151 209/118/209 -f 211/120/211 212/121/212 210/119/210 -f 210/119/210 209/118/209 211/120/211 -f 213/122/213 214/123/214 212/121/212 -f 212/121/212 211/120/211 213/122/213 -f 214/123/214 213/122/213 215/124/215 -f 216/125/216 209/118/209 151/88/151 -f 151/88/151 156/93/156 216/125/216 -f 217/126/217 211/120/211 209/118/209 -f 209/118/209 216/125/216 217/126/217 -f 218/127/218 213/122/213 211/120/211 -f 211/120/211 217/126/217 218/127/218 -f 213/122/213 218/127/218 215/128/215 -f 219/129/219 216/125/216 156/93/156 -f 156/93/156 160/97/160 219/129/219 -f 220/130/220 217/126/217 216/125/216 -f 216/125/216 219/129/219 220/130/220 -f 221/131/221 218/127/218 217/126/217 -f 217/126/217 220/130/220 221/131/221 -f 218/127/218 221/131/221 215/132/215 -f 222/133/222 219/129/219 160/97/160 -f 160/97/160 164/101/164 222/133/222 -f 223/134/223 220/130/220 219/129/219 -f 219/129/219 222/133/222 223/134/223 -f 224/135/224 221/131/221 220/130/220 -f 220/130/220 223/134/223 224/135/224 -f 221/131/221 224/135/224 215/136/215 -f 225/137/225 222/133/222 164/101/164 -f 164/101/164 168/105/168 225/137/225 -f 226/138/226 223/134/223 222/133/222 -f 222/133/222 225/137/225 226/138/226 -f 227/139/227 224/135/224 223/134/223 -f 223/134/223 226/138/226 227/139/227 -f 224/135/224 227/139/227 215/140/215 -f 228/141/228 225/137/225 168/105/168 -f 168/105/168 172/109/172 228/141/228 -f 229/142/229 226/138/226 225/137/225 -f 225/137/225 228/141/228 229/142/229 -f 230/143/230 227/139/227 226/138/226 -f 226/138/226 229/142/229 230/143/230 -f 227/139/227 230/143/230 215/144/215 -f 231/145/231 228/141/228 172/109/172 -f 172/109/172 176/113/176 231/145/231 -f 232/146/232 229/142/229 228/141/228 -f 228/141/228 231/145/231 232/146/232 -f 233/147/233 230/143/230 229/142/229 -f 229/142/229 232/146/232 233/147/233 -f 230/143/230 233/147/233 215/148/215 -f 234/149/234 231/145/231 176/113/176 -f 176/113/176 180/117/180 234/149/234 -f 235/150/235 232/146/232 231/145/231 -f 231/145/231 234/149/234 235/150/235 -f 236/151/236 233/147/233 232/146/232 -f 232/146/232 235/150/235 236/151/236 -f 233/147/233 236/151/236 215/152/215 -f 237/118/237 234/119/234 180/89/180 -f 180/89/180 184/88/184 237/118/237 -f 238/120/238 235/121/235 234/119/234 -f 234/119/234 237/118/237 238/120/238 -f 239/122/239 236/123/236 235/121/235 -f 235/121/235 238/120/238 239/122/239 -f 236/123/236 239/122/239 215/124/215 -f 240/125/240 237/118/237 184/88/184 -f 184/88/184 188/93/188 240/125/240 -f 241/126/241 238/120/238 237/118/237 -f 237/118/237 240/125/240 241/126/241 -f 242/127/242 239/122/239 238/120/238 -f 238/120/238 241/126/241 242/127/242 -f 239/122/239 242/127/242 215/128/215 -f 243/129/243 240/125/240 188/93/188 -f 188/93/188 192/97/192 243/129/243 -f 244/130/244 241/126/241 240/125/240 -f 240/125/240 243/129/243 244/130/244 -f 245/131/245 242/127/242 241/126/241 -f 241/126/241 244/130/244 245/131/245 -f 242/127/242 245/131/245 215/132/215 -f 246/133/246 243/129/243 192/97/192 -f 192/97/192 196/101/196 246/133/246 -f 247/134/247 244/130/244 243/129/243 -f 243/129/243 246/133/246 247/134/247 -f 248/135/248 245/131/245 244/130/244 -f 244/130/244 247/134/247 248/135/248 -f 245/131/245 248/135/248 215/136/215 -f 249/137/249 246/133/246 196/101/196 -f 196/101/196 200/105/200 249/137/249 -f 250/138/250 247/134/247 246/133/246 -f 246/133/246 249/137/249 250/138/250 -f 251/139/251 248/135/248 247/134/247 -f 247/134/247 250/138/250 251/139/251 -f 248/135/248 251/139/251 215/140/215 -f 252/141/252 249/137/249 200/105/200 -f 200/105/200 204/109/204 252/141/252 -f 253/142/253 250/138/250 249/137/249 -f 249/137/249 252/141/252 253/142/253 -f 254/143/254 251/139/251 250/138/250 -f 250/138/250 253/142/253 254/143/254 -f 251/139/251 254/143/254 215/144/215 -f 255/145/255 252/141/252 204/109/204 -f 204/109/204 208/113/208 255/145/255 -f 256/146/256 253/142/253 252/141/252 -f 252/141/252 255/145/255 256/146/256 -f 257/147/257 254/143/254 253/142/253 -f 253/142/253 256/146/256 257/147/257 -f 254/143/254 257/147/257 215/148/215 -f 210/149/210 255/145/255 208/113/208 -f 208/113/208 152/117/152 210/149/210 -f 212/150/212 256/146/256 255/145/255 -f 255/145/255 210/149/210 212/150/212 -f 214/151/214 257/147/257 256/146/256 -f 256/146/256 212/150/212 214/151/214 -f 257/147/257 214/151/214 215/152/215 -f 258/153/258 259/154/259 260/65/260 -f 260/65/260 261/155/261 258/153/258 -f 262/156/262 263/157/263 259/154/259 -f 259/154/259 258/153/258 262/156/262 -f 264/158/264 265/159/265 263/157/263 -f 263/157/263 262/156/262 264/158/264 -f 266/160/266 267/161/267 265/159/265 -f 265/159/265 264/158/264 266/160/266 -f 268/162/268 258/153/258 261/155/261 -f 261/155/261 269/69/269 268/162/268 -f 270/163/270 262/156/262 258/153/258 -f 258/153/258 268/162/268 270/163/270 -f 271/164/271 264/158/264 262/156/262 -f 262/156/262 270/163/270 271/164/271 -f 272/165/272 266/160/266 264/158/264 -f 264/158/264 271/164/271 272/165/272 -f 273/166/273 268/162/268 269/69/269 -f 269/69/269 274/167/274 273/166/273 -f 275/168/275 270/163/270 268/162/268 -f 268/162/268 273/166/273 275/168/275 -f 276/169/276 271/164/271 270/163/270 -f 270/163/270 275/168/275 276/169/276 -f 277/170/277 272/165/272 271/164/271 -f 271/164/271 276/169/276 277/170/277 -f 278/171/278 273/166/273 274/167/274 -f 274/167/274 279/73/279 278/171/278 -f 280/172/280 275/168/275 273/166/273 -f 273/166/273 278/171/278 280/172/280 -f 281/173/281 276/169/276 275/168/275 -f 275/168/275 280/172/280 281/173/281 -f 282/174/282 277/170/277 276/169/276 -f 276/169/276 281/173/281 282/174/282 -f 283/175/283 278/171/278 279/73/279 -f 279/73/279 284/176/284 283/175/283 -f 285/177/285 280/172/280 278/171/278 -f 278/171/278 283/175/283 285/177/285 -f 286/178/286 281/173/281 280/172/280 -f 280/172/280 285/177/285 286/178/286 -f 287/179/287 282/174/282 281/173/281 -f 281/173/281 286/178/286 287/179/287 -f 288/180/288 283/175/283 284/176/284 -f 284/176/284 289/77/289 288/180/288 -f 290/181/290 285/177/285 283/175/283 -f 283/175/283 288/180/288 290/181/290 -f 291/182/291 286/178/286 285/177/285 -f 285/177/285 290/181/290 291/182/291 -f 292/183/292 287/179/287 286/178/286 -f 286/178/286 291/182/291 292/183/292 -f 293/184/293 288/180/288 289/77/289 -f 289/77/289 294/185/294 293/184/293 -f 295/186/295 290/181/290 288/180/288 -f 288/180/288 293/184/293 295/186/295 -f 296/187/296 291/182/291 290/181/290 -f 290/181/290 295/186/295 296/187/296 -f 297/188/297 292/183/292 291/182/291 -f 291/182/291 296/187/296 297/188/297 -f 259/189/259 293/184/293 294/185/294 -f 294/185/294 260/81/260 259/189/259 -f 263/190/263 295/186/295 293/184/293 -f 293/184/293 259/189/259 263/190/263 -f 265/191/265 296/187/296 295/186/295 -f 295/186/295 263/190/263 265/191/265 -f 267/192/267 297/188/297 296/187/296 -f 296/187/296 265/191/265 267/192/267 -f 298/193/298 299/194/299 267/161/267 -f 267/161/267 266/160/266 298/193/298 -f 300/195/300 301/196/301 299/194/299 -f 299/194/299 298/193/298 300/195/300 -f 302/197/302 303/198/303 301/196/301 -f 301/196/301 300/195/300 302/197/302 -f 304/199/304 116/136/305 303/198/303 -f 303/198/303 302/197/302 304/199/304 -f 305/200/306 298/193/298 266/160/266 -f 266/160/266 272/165/272 305/200/306 -f 306/201/307 300/195/300 298/193/298 -f 298/193/298 305/200/306 306/201/307 -f 307/202/308 302/197/302 300/195/300 -f 300/195/300 306/201/307 307/202/308 -f 308/140/309 304/199/304 302/197/302 -f 302/197/302 307/202/308 308/140/309 -f 309/203/310 305/200/306 272/165/272 -f 272/165/272 277/170/277 309/203/310 -f 310/204/311 306/201/307 305/200/306 -f 305/200/306 309/203/310 310/204/311 -f 311/205/312 307/202/308 306/201/307 -f 306/201/307 310/204/311 311/205/312 -f 312/206/313 308/140/309 307/202/308 -f 307/202/308 311/205/312 312/206/313 -f 313/207/314 309/203/310 277/170/277 -f 277/170/277 282/174/282 313/207/314 -f 314/208/315 310/204/311 309/203/310 -f 309/203/310 313/207/314 314/208/315 -f 315/209/316 311/205/312 310/204/311 -f 310/204/311 314/208/315 315/209/316 -f 316/144/317 312/206/313 311/205/312 -f 311/205/312 315/209/316 316/144/317 -f 317/210/318 313/207/314 282/174/282 -f 282/174/282 287/179/287 317/210/318 -f 318/211/319 314/208/315 313/207/314 -f 313/207/314 317/210/318 318/211/319 -f 319/212/320 315/209/316 314/208/315 -f 314/208/315 318/211/319 319/212/320 -f 320/213/321 316/144/317 315/209/316 -f 315/209/316 319/212/320 320/213/321 -f 321/214/322 317/210/318 287/179/287 -f 287/179/287 292/183/292 321/214/322 -f 322/215/323 318/211/319 317/210/318 -f 317/210/318 321/214/322 322/215/323 -f 323/216/324 319/212/320 318/211/319 -f 318/211/319 322/215/323 323/216/324 -f 324/148/325 320/213/321 319/212/320 -f 319/212/320 323/216/324 324/148/325 -f 325/217/326 321/214/322 292/183/292 -f 292/183/292 297/188/297 325/217/326 -f 326/218/327 322/215/323 321/214/322 -f 321/214/322 325/217/326 326/218/327 -f 327/219/328 323/216/324 322/215/323 -f 322/215/323 326/218/327 327/219/328 -f 328/220/329 324/148/325 323/216/324 -f 323/216/324 327/219/328 328/220/329 -f 299/221/299 325/217/326 297/188/297 -f 297/188/297 267/192/267 299/221/299 -f 301/222/301 326/218/327 325/217/326 -f 325/217/326 299/221/299 301/222/301 -f 303/223/303 327/219/328 326/218/327 -f 326/218/327 301/222/301 303/223/303 -f 116/152/305 328/220/329 327/219/328 -f 327/219/328 303/223/303 116/152/305 -f 329/224/330 330/225/331 331/144/332 -f 331/144/332 332/206/333 329/224/330 -f 333/226/334 334/227/335 330/225/331 -f 330/225/331 329/224/330 333/226/334 -f 335/228/336 336/229/337 334/227/335 -f 334/227/335 333/226/334 335/228/336 -f 337/230/338 338/231/339 336/229/337 -f 336/229/337 335/228/336 337/230/338 -f 339/232/340 329/224/330 332/206/333 -f 332/206/333 340/140/341 339/232/340 -f 341/233/342 333/226/334 329/224/330 -f 329/224/330 339/232/340 341/233/342 -f 342/234/343 335/228/336 333/226/334 -f 333/226/334 341/233/342 342/234/343 -f 343/235/344 337/230/338 335/228/336 -f 335/228/336 342/234/343 343/235/344 -f 344/236/345 339/232/340 340/140/341 -f 340/140/341 345/199/346 344/236/345 -f 346/237/347 341/233/342 339/232/340 -f 339/232/340 344/236/345 346/237/347 -f 347/238/348 342/234/343 341/233/342 -f 341/233/342 346/237/347 347/238/348 -f 348/239/349 343/235/344 342/234/343 -f 342/234/343 347/238/348 348/239/349 -f 349/240/350 344/236/345 345/199/346 -f 345/199/346 350/136/351 349/240/350 -f 351/241/352 346/237/347 344/236/345 -f 344/236/345 349/240/350 351/241/352 -f 352/242/353 347/238/348 346/237/347 -f 346/237/347 351/241/352 352/242/353 -f 353/243/354 348/239/349 347/238/348 -f 347/238/348 352/242/353 353/243/354 -f 354/244/355 349/245/350 350/152/351 -f 350/152/351 355/220/356 354/244/355 -f 356/246/357 351/247/352 349/245/350 -f 349/245/350 354/244/355 356/246/357 -f 357/248/358 352/249/353 351/247/352 -f 351/247/352 356/246/357 357/248/358 -f 358/250/359 353/251/354 352/249/353 -f 352/249/353 357/248/358 358/250/359 -f 359/252/360 354/244/355 355/220/356 -f 355/220/356 360/148/361 359/252/360 -f 361/253/362 356/246/357 354/244/355 -f 354/244/355 359/252/360 361/253/362 -f 362/254/363 357/248/358 356/246/357 -f 356/246/357 361/253/362 362/254/363 -f 363/255/364 358/250/359 357/248/358 -f 357/248/358 362/254/363 363/255/364 -f 364/256/365 359/252/360 360/148/361 -f 360/148/361 365/213/366 364/256/365 -f 366/257/367 361/253/362 359/252/360 -f 359/252/360 364/256/365 366/257/367 -f 367/258/368 362/254/363 361/253/362 -f 361/253/362 366/257/367 367/258/368 -f 368/259/369 363/255/364 362/254/363 -f 362/254/363 367/258/368 368/259/369 -f 330/225/331 364/256/365 365/213/366 -f 365/213/366 331/144/332 330/225/331 -f 334/227/335 366/257/367 364/256/365 -f 364/256/365 330/225/331 334/227/335 -f 336/229/337 367/258/368 366/257/367 -f 366/257/367 334/227/335 336/229/337 -f 338/231/339 368/259/369 367/258/368 -f 367/258/368 336/229/337 338/231/339 -f 369/260/370 370/261/371 338/231/339 -f 338/231/339 337/230/338 369/260/370 -f 371/262/372 372/263/373 370/261/371 -f 370/261/371 369/260/370 371/262/372 -f 373/264/374 374/265/375 372/263/373 -f 372/263/373 371/262/372 373/264/374 -f 375/167/376 376/73/377 374/265/375 -f 374/265/375 373/264/374 375/167/376 -f 377/266/378 369/260/370 337/230/338 -f 337/230/338 343/235/344 377/266/378 -f 378/267/379 371/262/372 369/260/370 -f 369/260/370 377/266/378 378/267/379 -f 379/268/380 373/264/374 371/262/372 -f 371/262/372 378/267/379 379/268/380 -f 380/69/381 375/167/376 373/264/374 -f 373/264/374 379/268/380 380/69/381 -f 381/269/382 377/266/378 343/235/344 -f 343/235/344 348/239/349 381/269/382 -f 382/270/383 378/267/379 377/266/378 -f 377/266/378 381/269/382 382/270/383 -f 383/271/384 379/268/380 378/267/379 -f 378/267/379 382/270/383 383/271/384 -f 384/155/385 380/69/381 379/268/380 -f 379/268/380 383/271/384 384/155/385 -f 385/272/386 381/269/382 348/239/349 -f 348/239/349 353/243/354 385/272/386 -f 386/273/387 382/270/383 381/269/382 -f 381/269/382 385/272/386 386/273/387 -f 387/274/388 383/271/384 382/270/383 -f 382/270/383 386/273/387 387/274/388 -f 388/65/389 384/155/385 383/271/384 -f 383/271/384 387/274/388 388/65/389 -f 389/275/390 385/276/386 353/251/354 -f 353/251/354 358/250/359 389/275/390 -f 390/277/391 386/278/387 385/276/386 -f 385/276/386 389/275/390 390/277/391 -f 391/279/392 387/280/388 386/278/387 -f 386/278/387 390/277/391 391/279/392 -f 392/185/393 388/81/389 387/280/388 -f 387/280/388 391/279/392 392/185/393 -f 393/281/394 389/275/390 358/250/359 -f 358/250/359 363/255/364 393/281/394 -f 394/282/395 390/277/391 389/275/390 -f 389/275/390 393/281/394 394/282/395 -f 395/283/396 391/279/392 390/277/391 -f 390/277/391 394/282/395 395/283/396 -f 396/77/397 392/185/393 391/279/392 -f 391/279/392 395/283/396 396/77/397 -f 397/284/398 393/281/394 363/255/364 -f 363/255/364 368/259/369 397/284/398 -f 398/285/399 394/282/395 393/281/394 -f 393/281/394 397/284/398 398/285/399 -f 399/286/400 395/283/396 394/282/395 -f 394/282/395 398/285/399 399/286/400 -f 400/176/401 396/77/397 395/283/396 -f 395/283/396 399/286/400 400/176/401 -f 370/261/371 397/284/398 368/259/369 -f 368/259/369 338/231/339 370/261/371 -f 372/263/373 398/285/399 397/284/398 -f 397/284/398 370/261/371 372/263/373 -f 374/265/375 399/286/400 398/285/399 -f 398/285/399 372/263/373 374/265/375 -f 376/73/377 400/176/401 399/286/400 -f 399/286/400 374/265/375 376/73/377 -f 401/156/402 402/157/403 403/65/404 -f 404/160/405 405/161/406 402/157/403 -f 402/157/403 401/156/402 404/160/405 -f 406/195/407 407/196/408 405/161/406 -f 405/161/406 404/160/405 406/195/407 -f 408/199/409 409/136/410 407/196/408 -f 407/196/408 406/195/407 408/199/409 -f 410/163/411 401/156/402 403/155/404 -f 411/165/412 404/160/405 401/156/402 -f 401/156/402 410/163/411 411/165/412 -f 412/201/413 406/195/407 404/160/405 -f 404/160/405 411/165/412 412/201/413 -f 413/140/414 408/199/409 406/195/407 -f 406/195/407 412/201/413 413/140/414 -f 414/168/415 410/163/411 403/69/404 -f 415/170/416 411/165/412 410/163/411 -f 410/163/411 414/168/415 415/170/416 -f 416/204/417 412/201/413 411/165/412 -f 411/165/412 415/170/416 416/204/417 -f 417/206/418 413/140/414 412/201/413 -f 412/201/413 416/204/417 417/206/418 -f 418/172/419 414/168/415 403/167/404 -f 419/174/420 415/170/416 414/168/415 -f 414/168/415 418/172/419 419/174/420 -f 420/208/421 416/204/417 415/170/416 -f 415/170/416 419/174/420 420/208/421 -f 421/144/422 417/206/418 416/204/417 -f 416/204/417 420/208/421 421/144/422 -f 422/177/423 418/172/419 403/73/404 -f 423/179/424 419/174/420 418/172/419 -f 418/172/419 422/177/423 423/179/424 -f 424/211/425 420/208/421 419/174/420 -f 419/174/420 423/179/424 424/211/425 -f 425/213/426 421/144/422 420/208/421 -f 420/208/421 424/211/425 425/213/426 -f 426/181/427 422/177/423 403/176/404 -f 427/183/428 423/179/424 422/177/423 -f 422/177/423 426/181/427 427/183/428 -f 428/215/429 424/211/425 423/179/424 -f 423/179/424 427/183/428 428/215/429 -f 429/148/430 425/213/426 424/211/425 -f 424/211/425 428/215/429 429/148/430 -f 430/186/431 426/181/427 403/77/404 -f 431/188/432 427/183/428 426/181/427 -f 426/181/427 430/186/431 431/188/432 -f 432/218/433 428/215/429 427/183/428 -f 427/183/428 431/188/432 432/218/433 -f 433/220/434 429/148/430 428/215/429 -f 428/215/429 432/218/433 433/220/434 -f 434/190/435 430/186/431 403/185/404 -f 435/192/436 431/188/432 430/186/431 -f 430/186/431 434/190/435 435/192/436 -f 436/222/437 432/218/433 431/188/432 -f 431/188/432 435/192/436 436/222/437 -f 437/152/438 433/220/434 432/218/433 -f 432/218/433 436/222/437 437/152/438 -f 438/156/439 434/157/435 403/65/404 -f 439/160/440 435/161/436 434/157/435 -f 434/157/435 438/156/439 439/160/440 -f 440/195/441 436/196/437 435/161/436 -f 435/161/436 439/160/440 440/195/441 -f 441/199/442 437/136/438 436/196/437 -f 436/196/437 440/195/441 441/199/442 -f 442/163/443 438/156/439 403/155/404 -f 443/165/444 439/160/440 438/156/439 -f 438/156/439 442/163/443 443/165/444 -f 444/201/445 440/195/441 439/160/440 -f 439/160/440 443/165/444 444/201/445 -f 445/140/446 441/199/442 440/195/441 -f 440/195/441 444/201/445 445/140/446 -f 446/168/447 442/163/443 403/69/404 -f 447/170/448 443/165/444 442/163/443 -f 442/163/443 446/168/447 447/170/448 -f 448/204/449 444/201/445 443/165/444 -f 443/165/444 447/170/448 448/204/449 -f 449/206/450 445/140/446 444/201/445 -f 444/201/445 448/204/449 449/206/450 -f 450/172/451 446/168/447 403/167/404 -f 451/174/452 447/170/448 446/168/447 -f 446/168/447 450/172/451 451/174/452 -f 452/208/453 448/204/449 447/170/448 -f 447/170/448 451/174/452 452/208/453 -f 453/144/454 449/206/450 448/204/449 -f 448/204/449 452/208/453 453/144/454 -f 454/177/455 450/172/451 403/73/404 -f 455/179/456 451/174/452 450/172/451 -f 450/172/451 454/177/455 455/179/456 -f 456/211/457 452/208/453 451/174/452 -f 451/174/452 455/179/456 456/211/457 -f 457/213/458 453/144/454 452/208/453 -f 452/208/453 456/211/457 457/213/458 -f 458/181/459 454/177/455 403/176/404 -f 459/183/460 455/179/456 454/177/455 -f 454/177/455 458/181/459 459/183/460 -f 460/215/461 456/211/457 455/179/456 -f 455/179/456 459/183/460 460/215/461 -f 461/148/462 457/213/458 456/211/457 -f 456/211/457 460/215/461 461/148/462 -f 462/186/463 458/181/459 403/77/404 -f 463/188/464 459/183/460 458/181/459 -f 458/181/459 462/186/463 463/188/464 -f 464/218/465 460/215/461 459/183/460 -f 459/183/460 463/188/464 464/218/465 -f 465/220/466 461/148/462 460/215/461 -f 460/215/461 464/218/465 465/220/466 -f 402/190/403 462/186/463 403/185/404 -f 405/192/406 463/188/464 462/186/463 -f 462/186/463 402/190/403 405/192/406 -f 407/222/408 464/218/465 463/188/464 -f 463/188/464 405/192/406 407/222/408 -f 409/152/410 465/220/466 464/218/465 -f 464/218/465 407/222/408 409/152/410 -f 466/156/467 467/157/468 409/65/410 -f 409/65/410 408/155/409 466/156/467 -f 468/160/469 469/161/470 467/157/468 -f 467/157/468 466/156/467 468/160/469 -f 470/195/471 471/196/472 469/161/470 -f 469/161/470 468/160/469 470/195/471 -f 472/199/473 473/136/474 471/196/472 -f 471/196/472 470/195/471 472/199/473 -f 474/163/475 466/156/467 408/155/409 -f 408/155/409 413/69/414 474/163/475 -f 475/165/476 468/160/469 466/156/467 -f 466/156/467 474/163/475 475/165/476 -f 476/201/477 470/195/471 468/160/469 -f 468/160/469 475/165/476 476/201/477 -f 477/140/478 472/199/473 470/195/471 -f 470/195/471 476/201/477 477/140/478 -f 478/168/479 474/163/475 413/69/414 -f 413/69/414 417/167/418 478/168/479 -f 479/170/480 475/165/476 474/163/475 -f 474/163/475 478/168/479 479/170/480 -f 480/204/481 476/201/477 475/165/476 -f 475/165/476 479/170/480 480/204/481 -f 481/206/482 477/140/478 476/201/477 -f 476/201/477 480/204/481 481/206/482 -f 482/172/483 478/168/479 417/167/418 -f 417/167/418 421/73/422 482/172/483 -f 483/174/484 479/170/480 478/168/479 -f 478/168/479 482/172/483 483/174/484 -f 484/208/485 480/204/481 479/170/480 -f 479/170/480 483/174/484 484/208/485 -f 485/144/486 481/206/482 480/204/481 -f 480/204/481 484/208/485 485/144/486 -f 486/177/487 482/172/483 421/73/422 -f 421/73/422 425/176/426 486/177/487 -f 487/179/488 483/174/484 482/172/483 -f 482/172/483 486/177/487 487/179/488 -f 488/211/489 484/208/485 483/174/484 -f 483/174/484 487/179/488 488/211/489 -f 489/213/490 485/144/486 484/208/485 -f 484/208/485 488/211/489 489/213/490 -f 490/181/491 486/177/487 425/176/426 -f 425/176/426 429/77/430 490/181/491 -f 491/183/492 487/179/488 486/177/487 -f 486/177/487 490/181/491 491/183/492 -f 492/215/493 488/211/489 487/179/488 -f 487/179/488 491/183/492 492/215/493 -f 493/148/494 489/213/490 488/211/489 -f 488/211/489 492/215/493 493/148/494 -f 494/186/495 490/181/491 429/77/430 -f 429/77/430 433/185/434 494/186/495 -f 495/188/496 491/183/492 490/181/491 -f 490/181/491 494/186/495 495/188/496 -f 496/218/497 492/215/493 491/183/492 -f 491/183/492 495/188/496 496/218/497 -f 497/220/498 493/148/494 492/215/493 -f 492/215/493 496/218/497 497/220/498 -f 498/190/499 494/186/495 433/185/434 -f 433/185/434 437/81/438 498/190/499 -f 499/192/500 495/188/496 494/186/495 -f 494/186/495 498/190/499 499/192/500 -f 500/222/501 496/218/497 495/188/496 -f 495/188/496 499/192/500 500/222/501 -f 501/152/502 497/220/498 496/218/497 -f 496/218/497 500/222/501 501/152/502 -f 502/156/503 498/157/499 437/65/438 -f 437/65/438 441/155/442 502/156/503 -f 503/160/504 499/161/500 498/157/499 -f 498/157/499 502/156/503 503/160/504 -f 504/195/505 500/196/501 499/161/500 -f 499/161/500 503/160/504 504/195/505 -f 505/199/506 501/136/502 500/196/501 -f 500/196/501 504/195/505 505/199/506 -f 506/163/507 502/156/503 441/155/442 -f 441/155/442 445/69/446 506/163/507 -f 507/165/508 503/160/504 502/156/503 -f 502/156/503 506/163/507 507/165/508 -f 508/201/509 504/195/505 503/160/504 -f 503/160/504 507/165/508 508/201/509 -f 509/140/510 505/199/506 504/195/505 -f 504/195/505 508/201/509 509/140/510 -f 510/168/511 506/163/507 445/69/446 -f 445/69/446 449/167/450 510/168/511 -f 511/170/512 507/165/508 506/163/507 -f 506/163/507 510/168/511 511/170/512 -f 512/204/513 508/201/509 507/165/508 -f 507/165/508 511/170/512 512/204/513 -f 513/206/514 509/140/510 508/201/509 -f 508/201/509 512/204/513 513/206/514 -f 514/172/515 510/168/511 449/167/450 -f 449/167/450 453/73/454 514/172/515 -f 515/174/516 511/170/512 510/168/511 -f 510/168/511 514/172/515 515/174/516 -f 516/208/517 512/204/513 511/170/512 -f 511/170/512 515/174/516 516/208/517 -f 517/144/518 513/206/514 512/204/513 -f 512/204/513 516/208/517 517/144/518 -f 518/177/519 514/172/515 453/73/454 -f 453/73/454 457/176/458 518/177/519 -f 519/179/520 515/174/516 514/172/515 -f 514/172/515 518/177/519 519/179/520 -f 520/211/521 516/208/517 515/174/516 -f 515/174/516 519/179/520 520/211/521 -f 521/213/522 517/144/518 516/208/517 -f 516/208/517 520/211/521 521/213/522 -f 522/181/523 518/177/519 457/176/458 -f 457/176/458 461/77/462 522/181/523 -f 523/183/524 519/179/520 518/177/519 -f 518/177/519 522/181/523 523/183/524 -f 524/215/525 520/211/521 519/179/520 -f 519/179/520 523/183/524 524/215/525 -f 525/148/526 521/213/522 520/211/521 -f 520/211/521 524/215/525 525/148/526 -f 526/186/527 522/181/523 461/77/462 -f 461/77/462 465/185/466 526/186/527 -f 527/188/528 523/183/524 522/181/523 -f 522/181/523 526/186/527 527/188/528 -f 528/218/529 524/215/525 523/183/524 -f 523/183/524 527/188/528 528/218/529 -f 529/220/530 525/148/526 524/215/525 -f 524/215/525 528/218/529 529/220/530 -f 467/190/468 526/186/527 465/185/466 -f 465/185/466 409/81/410 467/190/468 -f 469/192/470 527/188/528 526/186/527 -f 526/186/527 467/190/468 469/192/470 -f 471/222/472 528/218/529 527/188/528 -f 527/188/528 469/192/470 471/222/472 -f 473/152/474 529/220/530 528/218/529 -f 528/218/529 471/222/472 473/152/474 -# 992 faces - diff --git a/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta b/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta deleted file mode 100644 index 59c470a..0000000 --- a/unity/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta +++ /dev/null @@ -1,66 +0,0 @@ -fileFormatVersion: 2 -guid: 53158f4ed39ed53448df438bc212f7e8 -ModelImporter: - serializedVersion: 16 - fileIDToRecycleName: - 100000: //RootNode - 100002: Teapot001 - 400000: //RootNode - 400002: Teapot001 - 2300000: Teapot001 - 3300000: Teapot001 - 4300000: Teapot001 - 9500000: //RootNode - materials: - importMaterials: 1 - materialName: 0 - materialSearch: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - optimizeGameObjects: 0 - animationCompression: 1 - animationRotationError: .5 - animationPositionError: .5 - animationScaleError: .5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - clipAnimations: [] - isReadable: 1 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - importBlendShapes: 1 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - optimizeMeshForGPU: 1 - weldVertices: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVPackMargin: 4 - tangentSpace: - normalSmoothAngle: 60 - splitTangentsAcrossUV: 1 - normalImportMode: 1 - tangentImportMode: 1 - importAnimation: 1 - copyAvatar: 0 - humanDescription: - human: [] - skeleton: [] - armTwist: .5 - foreArmTwist: .5 - upperLegTwist: .5 - legTwist: .5 - armStretch: .0500000007 - legStretch: .0500000007 - feetSpacing: 0 - rootMotionBoneName: - lastHumanDescriptionAvatarSource: {instanceID: 0} - animationType: 0 - additionalBone: 0 - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Scenes.meta b/unity/Assets/OBJ-IO/Examples/Scenes.meta deleted file mode 100644 index 85f95e5..0000000 --- a/unity/Assets/OBJ-IO/Examples/Scenes.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 141384ae82c22db4b8422ccbe172ef08 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Scenes/Example.unity b/unity/Assets/OBJ-IO/Examples/Scenes/Example.unity deleted file mode 100644 index 156264d29e19d85b0923324fbe0e7988e04d5ff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18064 zcmeHPON=B(5v?&c*ydwC#{6N{KaBsMHTYo9cF)Z2&cKX!JiWU%XsvZkcTIP(JylJ0 z^?r;c_W^??B=7+te?VHFIN}?Ki$Ssl2V3$9Brf=X1l%lxkT2N8i^!;otg0EWjIb@3 zT-8)nW@Kh$WWa z$=#i+((~F{p53{>7w2iV|8yQvBWW^6_1Cg!Gu&7Uvna`>t>8i;KaVaXRG*=Lc$W?j z#KUNLk^6ZMC@3iro`q;F%mGq) z?>BTaZF#B8wM?Hs*B`Le+%pdkD%I&`@hHdedjYIp8A;R#GYD0teB7s1O z#(5Seed_UU5-%(9hndDvO`S-yEIbpm`7iYUBc_#^R>{*ielTKH`>1WiJ$DCT7WBeA z>>U2zI<9M@?qzbM#5>q-+MSJc);+)A=NeZe0W%FVigYB!0?}r=M)oMnvJ9HwC&oUWlF%8{h}43~T1j9303ms!0Fs3w~ODls(05 z1;cCUIA(?c(H;O&hlqkL!yfc`3<<+Fl+g~QzA$W2Ps^(ebx4X)0B$S-g1X9$2YU_N z*w96Lv)ow3)AG`h4&q^tRu1e(E%L#OKu4>P54b}2x?)(pqunG#jIrB-QGLtYSF`@ptM*Iyt)BpEUOHsJOwXZu8$)CG#4 zvrzDH;An8eAcJWTKuvb>u~>`#zpVuqhEbT64%x;UeTnoea?W_r(XSz=U%tWR7AXDlkjpJlYWX@LFJSj>iVeact^RsP zrREB*}$&^+HIunBiEAgf>X~ zSvVTRUB(~_u0c!M70FoA*#e9$zWQ8j9bb$_PF5CRm1;iD4}ejc$%V;qNIL?n;rIlz zt5B=c2Ux7&7}b`IEFWcC+`3@*dX)4c>@;AfiQBbct86fY3#kjg5quvGvwoDj3^tZo zS3w|pn<#vbAyUGcBe}eR$OXnri|afKR~Qoa7&wwc-R^LLojE5oroXa*9?B%+B7aod zIAHFkK>$msh;}!G_C0NF0^f}xw9}4lcMF|@II@LsoOcFcFFiG8{qbCbPfC~?(NfJ) zdrrYo>vrV|pl>T2EtBn?=C(Z-fvAL%#HxEacy<*I$AExCo15cEFx&>+Gr?IlU_m0m zaL;v6Ig-V2&vkg^5<{zxfF+=PB&jc$X?=v27g6mh7A$c%9M?7o(F~fbhP8Hs5H!Fx zXjXxwO|F8$N&7NUZPig|V_sBi9mKX^WIclt6{GA-HfT0zD&uY>Bem{91Xmv^T!NP2 zuFMr9wcbGc^e~7wY~i!j5omLi<#tNSP@gugdH-QP%)5j2G|d}=?~(~mLe?KBBQW356+B^j3d_fwJhBr0fAx<(+YLal9&1_p{&(Tx&zv9gipTQR;6c^o5!;C4BN77 z-GLH`YGaq5mW9iS+9{jWRi@{e)|B5m%SnFAm&p}&$nle9%8n3ty4q5^=PLD~j9f2| z;EN5^-emhdxD%mk8frlqI^8IVI#CXe#@l#9LiyK@b{27PfQ>;68;ONE zm3!5|v8qNn)3nOzE7TqejifVzXMxS)fC79YSrW^T3}P%@gE70L(TY{Z;I0bB=vnou zV9W)CUauxBiZX*d7oitQ%Aq#qDXHD*R>GQH*-afKvSUR+PXJqvwd$l$sXA7;Cgf{_ z%3d*6>y3zx6OXlstE68uWb24PuWfom_Pvp`TN|?Pl7y(}cRoB(YBn9(YMkfgLk8Ay z1;Ny8=ZtARG>pbM*M$K><*XkAIg)^Zk}svSQ3O(d*)s*DBi*32;bz#44i7Tg9Zo4~ z2fe=pnu44G5Ie|pz(6iiO!P`Fkv}>!|AC3}eC?i7izHbXCmHIAjEhNIWAAd#0dAs+Y^2sSOf!PgL5M zJyUNoUHf9=#O7++6JKwQoFSWf)HMRpE#mX9Ty{epG`j&YZw2W}jEzjHK#QVLLJ zxc}ano#N9neZX5f7K>y~RSR%h50k!(+=H-+KY?wxlYZ0swL&Qf(9w@Yo1jbfxQhUR zVBBqy!}O}C1ut8fB8yo%MMAP3jnm^um zC(&34EnaO$2!Lmeu_&d)7F*%w46167t?<)`s{UD>v?>BJAA>h-%DQlDF$+(@n{XsD z>$u_`-DEpD`nqgFJ0WLulXK+0pWb7uw5I&VV`5K;5%B}h-Q|{+o*M`BmUm-SEpS3v zgk)D$y2R@ar=(Xqa&U$OK~x+>aZ2j%!nQ!}w6~BE?Wpp^U&Dnie09&luCtGDYebt& zO#3B|cFJ$6pF+JJ_Tq^UU;C!Sr6pgt11-)YGCJvB_ORsoh8jot8?9S$%+$`Jkc}Uj za)U>EmgiR3mZPN`E9H2VatVlUYAAn*@^%-VyFbq$HGm=N&odsT=auMWG(^O)8YW?1 zcdOtCG%<$JOM?lY>$$~Gsk+*7;lj2(_Q&e4f)(f55d$XoB*$KWP4mj&X(0(?Yy?kl z9SkZ;HE*C&Vwnm}P@EFzc;#%;u8Tp5D%JA=cx~I1GFF@qc*|n6LP@*f;~+k(!D7z2 z9BvL&Xv#WB`HEZXGP$=hc2#7==5u_zA_l8SHL=+JRVAu-u1M)I;RTY^wu->pC$ur7 zwqIky3nZCO?3QC7AQV(_qSdD(MP+XF-R=y-F2- znJraBx^A6(?>1kVHIOcC_pzDJ$vl16*Nx`W)cugei&ZOJ3+=M!Uj2|&+P3>NwBx~Y zE|(#G>}tQ?kc}D}w(9p4A~%UcY_#f^%SMe2Q2lb*2D1^VU(Wk8%&k908=eMECNeGb zf%;H)!)$!&Q;FOp*qIF^iSdZMq^$!n{ebZxeB^zS&LqRBCjJE^|;MI}p3PZn~?MI7QIx_wHE`G{2oz8@(zdG3(wYyn5 z9(&s2JA0|avl@20lZonD88Z%j+Ue)}uZt3l=1-!q(sWg5z(EmlNrt zD@zaS_bOGgJ9}Y-;{>Mx2;STyM<~|s(>R)ggYEskS;kw3FY|)-eT$y8?sb&+8s$Aed2pV%uBW{Fh{-GI zd5^npKwZkS?cGRuFHs)&!&f^Q-EaQI_g62Z&K{v>?c)~8dyMjCDeoS4-AZ}SxIC;e zaot9FFS$I(3)f!Cdxi26dPaPK>vqa}fP`atAvVgSlY|@sG5U`M=tIAoCJFhv;~NA9 z^qJLh`b{GJ#w57?p4a|-*Wd16_|Cuf{_^@g5C1^g+4rm8{^`&&OJ95XXD@b+9ln0U zYrX8pe>&R=g6Uik{BGXl@1tjTP4}Uhi~n%Nol^eeg%@8~nbV8vf=&}X+v-#@Q8w(r}QCa#aNU)238F-bh#g*H@;#%i;f9*@c9Z|!Y>pWbRvsst6}Wi68?Y|ZR0AFZM)2^K7lVkZ@O>k@!z**FFV`1 z@2SUr?epqWR^N(grUDr39!CI!*2owJ4?{(Q0ppH(_{Qa}$`)+^TxMowSY}pMDwnxy zK($?htaeUlA9MHePue>Yg6<#Z-~Ox;(X-b!bXhN@+3C*Xas;s7m(TosCvq->zN$V0 ztN>a_05gCZ62R^uc?d7bP{{HH#b5EZ=>u?VIh%G$%#1n)O4=x75XkNHH+oG~(VLwQcM}K!<7!IbO;|I~5 USN{0?zB^vO`ZwB_+)K)T13r*o-2eap diff --git a/unity/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta b/unity/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta deleted file mode 100644 index 48a2af6..0000000 --- a/unity/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 8573b7b1c7256de4896b3054d17de1b7 -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Scripts.meta b/unity/Assets/OBJ-IO/Examples/Scripts.meta deleted file mode 100644 index 76c47cf..0000000 --- a/unity/Assets/OBJ-IO/Examples/Scripts.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 6f612615b304fd249886c72faee156e0 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs b/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs deleted file mode 100644 index 8110127..0000000 --- a/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs +++ /dev/null @@ -1,51 +0,0 @@ - -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; - -using UnityEngine; - -using UnityExtension; - -using Random = UnityEngine.Random; - -[RequireComponent(typeof(MeshFilter))] -public class Example : MonoBehaviour -{ - //------------------------------------------------------------------------------------------------------------ - private const string INPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot.obj"; - private const string OUTPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj"; - - //------------------------------------------------------------------------------------------------------------ - private void Start() - { - // Load the OBJ in - var lStream = new FileStream(INPUT_PATH, FileMode.Open); - var lOBJData = OBJLoader.LoadOBJ(lStream); - var lMeshFilter = GetComponent(); - lMeshFilter.mesh.LoadOBJ(lOBJData); - lStream.Close(); - - lStream = null; - lOBJData = null; - - // Wiggle Vertices in Mesh - var lVertices = lMeshFilter.mesh.vertices; - for (int lCount = 0; lCount < lVertices.Length; ++lCount) - { - lVertices[lCount] = lVertices[lCount] + Vector3.up * Mathf.Sin(lVertices[lCount].x) * 4f; - } - lMeshFilter.mesh.vertices = lVertices; - - // Export the new Wiggled Mesh - if (File.Exists(OUTPUT_PATH)) - { - File.Delete(OUTPUT_PATH); - } - lStream = new FileStream(OUTPUT_PATH, FileMode.Create); - lOBJData = lMeshFilter.mesh.EncodeOBJ(); - OBJLoader.ExportOBJ(lOBJData, lStream); - lStream.Close(); - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta b/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta deleted file mode 100644 index 0575581..0000000 --- a/unity/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f3ab7cfdf40b84b41a7adc35c545c226 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins.meta b/unity/Assets/OBJ-IO/Plugins.meta deleted file mode 100644 index 4870cb1..0000000 --- a/unity/Assets/OBJ-IO/Plugins.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 0a5ac41a41be22246b94c47885410104 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension.meta b/unity/Assets/OBJ-IO/Plugins/Extension.meta deleted file mode 100644 index 5639c82..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 8c1f4314c6ab61442aeeb22e185f3614 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs deleted file mode 100644 index 06a8ae8..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs +++ /dev/null @@ -1,112 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -using UnityEngine; - -namespace UnityExtension -{ - public static class GameObjectExt - { - //------------------------------------------------------------------------------------------------------------ - public static T GetOrAddComponent(this GameObject lGo) where T : Component - { - T lComponent = lGo.GetComponent(); - if (lComponent == null) - { - lComponent = lGo.gameObject.AddComponent(); - } - return lComponent; - } - - //------------------------------------------------------------------------------------------------------------ - public static T GetComponentOfChild(this GameObject lGo, string lName) where T : Component - { - T lComponent = null; - Transform lTransform = lGo.transform.FindChild(lName); - if (lTransform != null) - { - lComponent = lTransform.GetComponent(); - } - return lComponent; - } - - //------------------------------------------------------------------------------------------------------------ - public static T[] GetComponentsOfChild(this GameObject lGo, string lName) where T : Component - { - T[] lComponent = null; - Transform lTransform = lGo.transform.FindChild(lName); - if (lTransform != null) - { - lComponent = lTransform.GetComponents(); - } - return lComponent; - } - - //------------------------------------------------------------------------------------------------------------ - public static GameObject InstantiateAsChild(this GameObject lGo, GameObject lObject) - { - GameObject lNewGo = lObject != null ? (GameObject)GameObject.Instantiate(lObject) : new GameObject(); - lNewGo.transform.parent = lGo.transform; - lNewGo.transform.localPosition = Vector3.zero; - lNewGo.transform.localRotation = Quaternion.identity; - lNewGo.transform.localScale = Vector3.one; - return lNewGo; - } - - //------------------------------------------------------------------------------------------------------------ - public static bool DestroyChildIfExists(this GameObject lGo, string lName) - { - Transform lTransform = lGo.transform.FindChild(lName); - if (lTransform != null) - { - GameObject.Destroy(lTransform.gameObject); - return true; - } - else - { - return false; - } - } - - //------------------------------------------------------------------------------------------------------------ - public static bool ContainsChildren(this GameObject lGo, params string[] lPaths) - { - for (int lCount = 0; lCount < lPaths.Length; ++lCount) - { - if (lGo.transform.FindChild(lPaths[lCount]) == null) - { - return false; - } - } - return true; - } - - //------------------------------------------------------------------------------------------------------------ - public static bool IsChildOf(this GameObject lGo, GameObject lParent) - { - Transform lTransform = lGo.transform; - while (lTransform.parent != null) - { - if (lTransform == lParent.transform) - { - return true; - } - lTransform = lTransform.parent; - } - return false; - } - - //------------------------------------------------------------------------------------------------------------ - public static void SetLayerRecursively(this GameObject lGo, int lLayer) - { - lGo.layer = lLayer; - foreach (Transform lTransform in lGo.transform) - { - lTransform.gameObject.SetLayerRecursively(lLayer); - } - } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta deleted file mode 100644 index 30e3794..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 35b132c59c7910c4b99e560a0f9baf95 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs deleted file mode 100644 index e8b117a..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs +++ /dev/null @@ -1,627 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -using UnityEngine; - -namespace UnityExtension -{ - public static class MeshExt - { - //------------------------------------------------------------------------------------------------------------ - public static void RecalculateTangents(this Mesh lMesh) - { - //speed up math by copying the mesh arrays - int[] triangles = lMesh.triangles; - Vector3[] vertices = lMesh.vertices; - Vector2[] uv = lMesh.uv; - Vector3[] normals = lMesh.normals; - - //variable definitions - int triangleCount = triangles.Length; - int vertexCount = vertices.Length; - - Vector3[] tan1 = new Vector3[vertexCount]; - Vector3[] tan2 = new Vector3[vertexCount]; - - Vector4[] tangents = new Vector4[vertexCount]; - - for (long a = 0; a < triangleCount; a += 3) - { - long i1 = triangles[a + 0]; - long i2 = triangles[a + 1]; - long i3 = triangles[a + 2]; - - Vector3 v1 = vertices[i1]; - Vector3 v2 = vertices[i2]; - Vector3 v3 = vertices[i3]; - - Vector2 w1 = uv[i1]; - Vector2 w2 = uv[i2]; - Vector2 w3 = uv[i3]; - - float x1 = v2.x - v1.x; - float x2 = v3.x - v1.x; - float y1 = v2.y - v1.y; - float y2 = v3.y - v1.y; - float z1 = v2.z - v1.z; - float z2 = v3.z - v1.z; - - float s1 = w2.x - w1.x; - float s2 = w3.x - w1.x; - float t1 = w2.y - w1.y; - float t2 = w3.y - w1.y; - - float r = 1.0f / (s1 * t2 - s2 * t1); - - Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); - Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); - - tan1[i1] += sdir; - tan1[i2] += sdir; - tan1[i3] += sdir; - - tan2[i1] += tdir; - tan2[i2] += tdir; - tan2[i3] += tdir; - } - - - for (long a = 0; a < vertexCount; ++a) - { - Vector3 n = normals[a]; - Vector3 t = tan1[a]; - - //Vector3 tmp = (t - n * Vector3.Dot(n, t)).normalized; - //tangents[a] = new Vector4(tmp.x, tmp.y, tmp.z); - Vector3.OrthoNormalize(ref n, ref t); - tangents[a].x = t.x; - tangents[a].y = t.y; - tangents[a].z = t.z; - - tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; - } - - lMesh.tangents = tangents; - } - - //------------------------------------------------------------------------------------------------------------ - public static void LoadOBJ(this Mesh lMesh, OBJData lData) - { - List lVertices = new List(); - List lNormals = new List(); - List lUVs = new List(); - List[] lIndices = new List[lData.m_Groups.Count]; - Dictionary lVertexIndexRemap = new Dictionary(); - bool lHasNormals = lData.m_Normals.Count > 0; - bool lHasUVs = lData.m_UVs.Count > 0; - - lMesh.subMeshCount = lData.m_Groups.Count; - for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) - { - OBJGroup lGroup = lData.m_Groups[lGCount]; - lIndices[lGCount] = new List(); - - for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) - { - OBJFace lFace = lGroup.Faces[lFCount]; - - // Unity3d doesn't support non-triangle faces - // so we do simple fan triangulation - for (int lVCount = 1; lVCount < lFace.Count - 1; ++lVCount) - { - foreach (int i in new int[]{0, lVCount, lVCount + 1}) - { - OBJFaceVertex lFaceVertex = lFace[i]; - int lVertexIndex = -1; - - if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { - lVertexIndexRemap[lFaceVertex] = lVertices.Count; - lVertexIndex = lVertices.Count; - - lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); - if (lHasUVs) - { - lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); - } - if (lHasNormals) - { - lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); - } - } - - lIndices[lGCount].Add(lVertexIndex); - } - } - } - } - - lMesh.triangles = new int[]{ }; - lMesh.vertices = lVertices.ToArray(); - lMesh.uv = lUVs.ToArray(); - lMesh.normals = lNormals.ToArray(); - if (!lHasNormals) - { - lMesh.RecalculateNormals(); - } - - lMesh.RecalculateTangents(); - - for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) - { - lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); - } - } - - //------------------------------------------------------------------------------------------------------------ - public static OBJData EncodeOBJ(this Mesh lMesh) - { - OBJData lData = new OBJData - { - m_Vertices = new List(lMesh.vertices), - m_UVs = new List(lMesh.uv), - m_Normals = new List(lMesh.normals), - m_UV2s = new List(lMesh.uv1), - m_Colors = new List(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; - } - - //------------------------------------------------------------------------------------------------------------ - internal const int MESH_BINARY_HEADER_SIZE = 20; - internal const short MESH_BINARY_SIGNATURE = 0xF5; - internal const short MESH_BINARY_VERSION = 1; - - //------------------------------------------------------------------------------------------------------------ - public static bool LoadBinary(this Mesh lMesh, byte[] lData) - { - int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); - int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); - int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); - int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); - int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); - int lSizeOfColor = Marshal.SizeOf(typeof(Color)); - - int lDataOffset = MESH_BINARY_HEADER_SIZE; - int lDeltaOffset = 0; - - if (lData == null || - lData.Length < MESH_BINARY_HEADER_SIZE) - { - return false; - } - - // Header - short lSignature = BitConverter.ToInt16(lData, 0); - short lVersion = BitConverter.ToInt16(lData, 2); - - if (lSignature != MESH_BINARY_SIGNATURE || - lVersion != MESH_BINARY_VERSION) - { - return false; - } - - lMesh.Clear(); - - int lVertexCount = BitConverter.ToInt32(lData, 4); - int lIndexCount = BitConverter.ToInt32(lData, 8); - int lSubMeshCount = BitConverter.ToInt32(lData, 12); - - byte lFlags = lData[16]; - - bool lUVFlag = (lFlags & 1) > 0; - bool lUV1Flag = (lFlags & 2) > 0; - bool lUV2Flag = (lFlags & 4) > 0; - bool lNormalFlag = (lFlags & 8) > 0; - bool lTangentFlag = (lFlags & 16) > 0; - bool lColorFlag = (lFlags & 32) > 0; - bool lBindPoseFlag = (lFlags & 64) > 0; - bool lBoneWeightFlag = (lFlags & 128) > 0; - - // Vertices - Vector3[] lVertices = new Vector3[lVertexCount]; - lDeltaOffset = lVertices.Length * lSizeOfVector3; - GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.vertices = lVertices; - lVertices = null; - - // UV Channel 0 - Vector2[] lUVs = null; - if (lUVFlag == true) - { - lUVs = new Vector2[lVertexCount]; - lDeltaOffset = lUVs.Length * lSizeOfVector2; - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.uv = lUVs; - Debug.Log("UV Count : " + lUVs.Length); - lUVs = null; - } - - // UV Channel 1 - if (lUV1Flag == true) - { - lUVs = new Vector2[lVertexCount]; - lDeltaOffset = lUVs.Length * lSizeOfVector2; - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.uv1 = lUVs; - Debug.Log("UV1 Count : " + lUVs.Length); - lUVs = null; - } - - // UV Channel 2 - if (lUV2Flag == true) - { - lUVs = new Vector2[lVertexCount]; - lDeltaOffset = lUVs.Length * lSizeOfVector2; - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.uv2 = lUVs; - Debug.Log("UV2 Count : " + lUVs.Length); - lUVs = null; - } - - // Normals - if (lNormalFlag == true) - { - Vector3[] lNormals = new Vector3[lVertexCount]; - lDeltaOffset = lNormals.Length * lSizeOfVector3; - lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.normals = lNormals; - Debug.Log("Normal Count : " + lNormals.Length); - lNormals = null; - } - - // Tangents - if (lTangentFlag == true) - { - Vector4[] lTangents = new Vector4[lVertexCount]; - lDeltaOffset = lTangents.Length * lSizeOfVector4; - lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.tangents = lTangents; - Debug.Log("Tangents Count : " + lTangents.Length); - lTangents = null; - } - - // Colors - if (lColorFlag == true) - { - Color[] lColors = new Color[lVertexCount]; - lDeltaOffset = lColors.Length * lSizeOfColor; - lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.colors = lColors; - lColors = null; - } - - // Bind Poses - if (lBindPoseFlag == true) - { - Matrix4x4[] lBindPoses = new Matrix4x4[lVertexCount]; - lDeltaOffset = lBindPoses.Length * lSizeOfMatrix4x4; - lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.bindposes = lBindPoses; - lBindPoses = null; - } - - // Bone Weights - if (lBoneWeightFlag == true) - { - BoneWeight[] lBoneWeight = new BoneWeight[lVertexCount]; - lDeltaOffset = lBoneWeight.Length * lSizeOfBoneWeight; - lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); - Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); - lHandle.Free(); - lDataOffset += lDeltaOffset; - lMesh.boneWeights = lBoneWeight; - lBoneWeight = null; - } - - // Indices - int[] lIndices = new int[lIndexCount]; - lDeltaOffset = lIndices.Length * sizeof(int); - Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); - lDataOffset += lDeltaOffset; - lMesh.triangles = lIndices; - lIndices = null; - - // SubMesh Indices - for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) - { - int lSubMeshIndexCount = BitConverter.ToInt32(lData, lDataOffset); - lDataOffset += sizeof(int); - - lIndices = new int[lSubMeshIndexCount]; - lDeltaOffset = lIndices.Length * sizeof(int); - Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); - lDataOffset += lDeltaOffset; - - if (lIndices.Length > 0 && - lIndices.Length % 3 == 0) - { - lMesh.SetTriangles(lIndices, lSubMeshIndex); - } - - lIndices = null; - } - - return true; - } - - //------------------------------------------------------------------------------------------------------------ - public static byte[] EncodeBinary(this Mesh lMesh) - { - // Currently no support for BlendShape - - int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); - int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); - int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); - int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); - int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); - int lSizeOfColor = Marshal.SizeOf(typeof(Color)); - - int lDataSize = MESH_BINARY_HEADER_SIZE; - int lDeltaSize = 0; - - bool lUVFlag = false, lUV1Flag = false, lUV2Flag = false, - lNormalFlag = false, lTangentFlag = false, lColorFlag = false, - lBindPoseFlag = false, lBoneWeightFlag = false; - - byte[] lData = new byte[lDataSize]; - - // Vertices - Vector3[] lVertices = lMesh.vertices; - Int32Converter lVertexCount = lVertices.Length; - lDeltaSize = lVertices.Length * lSizeOfVector3; - Array.Resize(ref lData, lDataSize + lDeltaSize); - GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - lVertices = null; - - // UV Channel 0 - Vector2[] lUVs = lMesh.uv; - if (lUVs.Length > 0) - { - lUVFlag = true; - lDeltaSize = lUVs.Length * lSizeOfVector2; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lUVs = null; - - // UV Channel 1 - lUVs = lMesh.uv1; - if (lUVs.Length > 0) - { - lUV1Flag = true; - lDeltaSize = lUVs.Length * lSizeOfVector2; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lUVs = null; - - // UV Channel 2 - lUVs = lMesh.uv2; - if (lUVs.Length > 0) - { - lUV2Flag = true; - lDeltaSize = lUVs.Length * lSizeOfVector2; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lUVs = null; - - // Normals - Vector3[] lNormals = lMesh.normals; - if (lNormals.Length > 0) - { - lNormalFlag = true; - lDeltaSize = lNormals.Length * lSizeOfVector3; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lNormals = null; - - // Tangents - Vector4[] lTangents = lMesh.tangents; - if (lTangents.Length > 0) - { - lTangentFlag = true; - lDeltaSize = lTangents.Length * lSizeOfVector4; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lTangents = null; - - // Colors - Color[] lColors = lMesh.colors; - if (lColors.Length > 0) - { - lColorFlag = true; - lDeltaSize = lColors.Length * lSizeOfColor; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lColors = null; - - // BindPoses - Matrix4x4[] lBindPoses = lMesh.bindposes; - if (lBindPoses.Length > 0) - { - lBindPoseFlag = true; - lDeltaSize = lBindPoses.Length * lSizeOfMatrix4x4; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lBindPoses = null; - - // BoneWeight - BoneWeight[] lBoneWeight = lMesh.boneWeights; - if (lBoneWeight.Length > 0) - { - lBoneWeightFlag = true; - lDeltaSize = lBoneWeight.Length * lSizeOfBoneWeight; - Array.Resize(ref lData, lDataSize + lDeltaSize); - lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); - Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); - lHandle.Free(); - lDataSize += lDeltaSize; - } - lBoneWeight = null; - - // Indices - int[] lIndices = lMesh.triangles; - Int32Converter lIndexCount = lIndices.Length; - lDeltaSize = lIndices.Length * sizeof(int); - Array.Resize(ref lData, lDataSize + lDeltaSize); - Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize); - lDataSize += lDeltaSize; - lIndices = null; - - // SubMesh Indices - Int32Converter lSubMeshCount = lMesh.subMeshCount; - for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) - { - lIndices = lMesh.GetTriangles(lSubMeshIndex); - - Int32Converter lSubMeshIndexCount = lIndices.Length; - - lDeltaSize = sizeof(int) + (lIndices.Length * sizeof(int)); - Array.Resize(ref lData, lDataSize + lDeltaSize); - - lData[lDataSize + 0] = lSubMeshIndexCount.Byte1; - lData[lDataSize + 1] = lSubMeshIndexCount.Byte2; - lData[lDataSize + 2] = lSubMeshIndexCount.Byte3; - lData[lDataSize + 3] = lSubMeshIndexCount.Byte4; - - Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize - sizeof(int)); - lDataSize += lDeltaSize; - } - - // Header - lData[0] = (byte)(MESH_BINARY_SIGNATURE & 0xFF); - lData[1] = (byte)((MESH_BINARY_SIGNATURE >> 8) & 0xFF); - - lData[2] = (byte)(MESH_BINARY_VERSION & 0xFF); - lData[3] = (byte)((MESH_BINARY_VERSION >> 8) & 0xFF); - - lData[4] = lVertexCount.Byte1; - lData[5] = lVertexCount.Byte2; - lData[6] = lVertexCount.Byte3; - lData[7] = lVertexCount.Byte4; - - lData[8] = lIndexCount.Byte1; - lData[9] = lIndexCount.Byte2; - lData[10] = lIndexCount.Byte3; - lData[11] = lIndexCount.Byte4; - - lData[12] = lSubMeshCount.Byte1; - lData[13] = lSubMeshCount.Byte2; - lData[14] = lSubMeshCount.Byte3; - lData[15] = lSubMeshCount.Byte4; - - lData[16] = (byte)( - (lUVFlag ? 1 : 0) | - (lUV1Flag ? 2 : 0) | - (lUV2Flag ? 4 : 0) | - (lNormalFlag ? 8 : 0) | - (lTangentFlag ? 16 : 0) | - (lColorFlag ? 32 : 0) | - (lBindPoseFlag ? 64 : 0) | - (lBoneWeightFlag ? 128 : 0)); - - return lData; - } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta deleted file mode 100644 index c9ff685..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a643d266ae55c8845ac48528640b7e8e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs b/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs deleted file mode 100644 index 8c95499..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs +++ /dev/null @@ -1,43 +0,0 @@ - -using System; -using System.Globalization; - -public static class StringExt -{ - //------------------------------------------------------------------------------------------------------------ - public static float ParseInvariantFloat(this string floatString) - { - return float.Parse(floatString, CultureInfo.InvariantCulture.NumberFormat); - } - - //------------------------------------------------------------------------------------------------------------ - public static int ParseInvariantInt(this string intString) - { - return int.Parse(intString, CultureInfo.InvariantCulture.NumberFormat); - } - - //------------------------------------------------------------------------------------------------------------ - public static bool EqualsInvariantCultureIgnoreCase(this string str, string s) - { - return str.Equals(s, StringComparison.InvariantCultureIgnoreCase); - } - - //------------------------------------------------------------------------------------------------------------ - public static bool IsNullOrEmpty(this string str) - { - return string.IsNullOrEmpty(str); - } - - //------------------------------------------------------------------------------------------------------------ - public static bool IsNullOrWhiteSpace(string value) - { - if (value == null) - return true; - for (int index = 0; index < value.Length; ++index) - { - if (!char.IsWhiteSpace(value[index])) - return false; - } - return true; - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta deleted file mode 100644 index b911e8c..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5403d11ff2ec0124a9a20522559dfcfa -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs deleted file mode 100644 index b86615d..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs +++ /dev/null @@ -1,55 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; - -using UnityEngine; - -namespace UnityExtension -{ - public static class Texture2DExt - { - //------------------------------------------------------------------------------------------------------------ - public static byte[] EncodeToTGA(this Texture2D lTexture) - { - MemoryStream lDataStream = new MemoryStream(18 + (lTexture.width * lTexture.height * 3)); - BinaryWriter lDataWriter = new BinaryWriter(lDataStream); - - if (lDataWriter != null) - { - lDataWriter.Write((short)0); - lDataWriter.Write((byte)2); - lDataWriter.Write((int)0); - lDataWriter.Write((int)0); - lDataWriter.Write((byte)0); - lDataWriter.Write((short)lTexture.width); - lDataWriter.Write((short)lTexture.height); - lDataWriter.Write((byte)24); - lDataWriter.Write((byte)0); - - Color32[] lPixelData = lTexture.GetPixels32(); - for (int lCount = 0; lCount < lPixelData.Length; ++lCount) - { - lDataWriter.Write(lPixelData[lCount].b); - lDataWriter.Write(lPixelData[lCount].g); - lDataWriter.Write(lPixelData[lCount].r); - } - } - - return lDataStream.GetBuffer(); - } - - //------------------------------------------------------------------------------------------------------------ - public static void ConvertLightmapToMobile(this Texture2D lTexture) - { - Color[] lColorData = lTexture.GetPixels(); - for (int lCount = 0; lCount < lColorData.Length; ++lCount) - { - lColorData[lCount] = (lColorData[lCount] * (8f * lColorData[lCount].a)) * 0.5f; - } - lTexture.SetPixels(lColorData); - lTexture.Apply(); - lColorData = null; - } - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta deleted file mode 100644 index 9b0d439..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9260066d99f960241b2a222401bcb685 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs deleted file mode 100644 index 3ee939e..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs +++ /dev/null @@ -1,28 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -using UnityEngine; - -namespace UnityExtension -{ - public static class TransformExt - { - //------------------------------------------------------------------------------------------------------------ - public static void LocalReset(this Transform lTransform) - { - lTransform.localPosition = Vector3.zero; - lTransform.localRotation = Quaternion.identity; - lTransform.localScale = Vector3.one; - } - - //------------------------------------------------------------------------------------------------------------ - public static void Align(this Transform lTransform, Transform lTarget) - { - lTransform.position = lTarget.position; - lTransform.rotation = lTarget.rotation; - } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta deleted file mode 100644 index 6075523..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a8e76b9c1894ec743ae076720e775f49 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs deleted file mode 100644 index 97f4064..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs +++ /dev/null @@ -1,239 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -using UnityEngine; - -namespace UnityExtension -{ - //------------------------------------------------------------------------------------------------------------ - public static class Utils - { - //------------------------------------------------------------------------------------------------------------ - public static bool HasKeys(Dictionary lData, params string[] lKeys) - { - if (lKeys != null) - { - for (int lCount = 0; lCount < lKeys.Length; ++lCount) - { - if (!lData.ContainsKey(lKeys[lCount])) - { - return false; - } - } - } - return true; - } - - //------------------------------------------------------------------------------------------------------------ - public static void ClearChildren(GameObject lGo, string lTarget) - { - if (lGo != null) - { - Transform lTransform = null; - for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) - { - lTransform = lGo.transform.GetChild(lCount); - if (lTransform.name.Contains(lTarget)) - { - lTransform.parent = null; - GameObject.Destroy(lTransform.gameObject); - } - } - } - } - - //------------------------------------------------------------------------------------------------------------ - public static void ClearChildrenRegex(GameObject lGo, string lPattern) - { - if (lGo != null) - { - Transform lTransform = null; - Regex lRegex = new Regex(lPattern); - for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) - { - lTransform = lGo.transform.GetChild(lCount); - if (lRegex.IsMatch(lTransform.name)) - { - lTransform.parent = null; - GameObject.Destroy(lTransform.gameObject); - } - } - } - } - - //------------------------------------------------------------------------------------------------------------ - public static void VerifyObjects(string lMsg, params object[] lObjects) - { - for (int lCount = 0; lCount < lObjects.Length; ++lCount) - { - if (lObjects[lCount] == null) - { - Debug.LogError(lMsg); - break; - } - } - } - - //------------------------------------------------------------------------------------------------------------ - public static bool JSONCheck(string lText) - { - return !string.IsNullOrEmpty(lText) && lText[0] == '{'; - } - - //------------------------------------------------------------------------------------------------------------ - public static Vector3 ParseVector3Json(string lJsonData) - { - string[] lVector3Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); - Vector3 lVector3 = Vector3.zero; - - if (float.TryParse(lVector3Array[0], out lVector3.x) == false) - { - return Vector3.zero; - } - if (float.TryParse(lVector3Array[1], out lVector3.y) == false) - { - return Vector3.zero; - } - if (float.TryParse(lVector3Array[2], out lVector3.z) == false) - { - return Vector3.zero; - } - - return lVector3; - } - - //------------------------------------------------------------------------------------------------------------ - public static Vector4 ParseVector4Json(string lJsonData) - { - string[] lVector4Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); - Vector4 lVector4 = Vector4.zero; - - if (float.TryParse(lVector4Array[0], out lVector4.x) == false) - { - return Vector4.zero; - } - if (float.TryParse(lVector4Array[1], out lVector4.y) == false) - { - return Vector4.zero; - } - if (float.TryParse(lVector4Array[2], out lVector4.z) == false) - { - return Vector4.zero; - } - if (float.TryParse(lVector4Array[3], out lVector4.w) == false) - { - return Vector4.zero; - } - - return lVector4; - } - - //------------------------------------------------------------------------------------------------------------ - public static Vector2 ParseVector2String(string lData, char lSeperator = ' ') - { - string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); - - float lX = lParts[0].ParseInvariantFloat(); - float lY = lParts[1].ParseInvariantFloat(); - - return new Vector2(lX, lY); - } - - //------------------------------------------------------------------------------------------------------------ - public static Vector3 ParseVector3String(string lData, char lSeperator = ' ') - { - string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); - - float lX = lParts[0].ParseInvariantFloat(); - float lY = lParts[1].ParseInvariantFloat(); - float lZ = lParts[2].ParseInvariantFloat(); - - return new Vector3(lX, lY, lZ); - } - - //------------------------------------------------------------------------------------------------------------ - public static Vector4 ParseVector4String(string lData, char lSeperator = ' ') - { - string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); - - float lX = lParts[0].ParseInvariantFloat(); - float lY = lParts[1].ParseInvariantFloat(); - float lZ = lParts[2].ParseInvariantFloat(); - float lW = lParts[3].ParseInvariantFloat(); - - return new Vector4(lX, lY, lZ, lW); - } - - //------------------------------------------------------------------------------------------------------------ - public static Quaternion ParseQuaternion(string lJsonData) - { - string[] lQuaternionArray = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); - Quaternion lQuaternion = Quaternion.identity; - - if (float.TryParse(lQuaternionArray[0], out lQuaternion.x) == false) - { - return Quaternion.identity; - } - if (float.TryParse(lQuaternionArray[1], out lQuaternion.y) == false) - { - return Quaternion.identity; - } - if (float.TryParse(lQuaternionArray[2], out lQuaternion.z) == false) - { - return Quaternion.identity; - } - if (float.TryParse(lQuaternionArray[3], out lQuaternion.w) == false) - { - return Quaternion.identity; - } - - return lQuaternion; - } - - //------------------------------------------------------------------------------------------------------------ - public static string Vector3String(Vector3 lVector3) - { - return "(" + - lVector3.x.ToString("f3") + "," + - lVector3.y.ToString("f3") + "," + - lVector3.z.ToString("f3") + - ")"; - } - - //------------------------------------------------------------------------------------------------------------ - public static string Vector4String(Vector4 lVector4) - { - return "(" + - lVector4.x.ToString("f3") + "," + - lVector4.y.ToString("f3") + "," + - lVector4.z.ToString("f3") + "," + - lVector4.w.ToString("f3") + - ")"; - } - - //------------------------------------------------------------------------------------------------------------ - public static string QuaternionString(Quaternion lQuaternion) - { - return "(" + - lQuaternion.x.ToString("f3") + "," + - lQuaternion.y.ToString("f3") + "," + - lQuaternion.z.ToString("f3") + "," + - lQuaternion.w.ToString("f3") + - ")"; - } - - //------------------------------------------------------------------------------------------------------------ - public static int FirstInt(string lJsonData) - { - string lDigits = ""; - for (int lCount = 0; lCount < lJsonData.Length && Char.IsDigit(lJsonData[lCount]); ++lCount) - { - lDigits += lJsonData[lCount]; - } - return int.Parse(lDigits); - } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta deleted file mode 100644 index 2d06f8a..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 06a010ef6a1e94840a51827a2a02badc -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs b/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs deleted file mode 100644 index 95cec36..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs +++ /dev/null @@ -1,35 +0,0 @@ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -using UnityEngine; - -namespace UnityExtension -{ - //------------------------------------------------------------------------------------------------------------ - public static class Vector3Ext - { - //------------------------------------------------------------------------------------------------------------ - public static readonly Vector3 IgnoreX = new Vector3(0f, 1f, 1f); - public static readonly Vector3 IgnoreY = new Vector3(1f, 0f, 1f); - public static readonly Vector3 IgnoreZ = new Vector3(1f, 1f, 0f); - - //------------------------------------------------------------------------------------------------------------ - public static Color ToColor(this Vector3 lVector) - { - return new Color(lVector.x, lVector.y, lVector.z); - } - } - - //------------------------------------------------------------------------------------------------------------ - public static class Vector4Ext - { - //------------------------------------------------------------------------------------------------------------ - public static Color ToColor(this Vector4 lVector) - { - return new Color(lVector.x, lVector.y, lVector.z, lVector.w); - } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta b/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta deleted file mode 100644 index 6c446b2..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 18a26dda21abdf5468d5731a6dbd26c4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh.meta b/unity/Assets/OBJ-IO/Plugins/Mesh.meta deleted file mode 100644 index 6d5a2e1..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: da432757bf963174d97e5319c45db1dc -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta deleted file mode 100644 index 218f11f..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: f74fe5c4c28267845b900549b670af26 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs deleted file mode 100644 index 3e3e5f9..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs +++ /dev/null @@ -1,18 +0,0 @@ - -using System.Collections.Generic; - -using UnityEngine; - -public class OBJData -{ - //------------------------------------------------------------------------------------------------------------ - public List m_Vertices = new List(); - public List m_Normals = new List(); - public List m_UVs = new List(); - public List m_UV2s = new List(); - public List m_Colors = new List(); - - //------------------------------------------------------------------------------------------------------------ - public List m_Materials = new List(); - public List m_Groups = new List(); -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta deleted file mode 100644 index e9c7d65..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5c57f7fdab36a3f4d9d97f4785a884f6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs deleted file mode 100644 index ee76c3e..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs +++ /dev/null @@ -1,101 +0,0 @@ - -using System; -using System.IO; -using System.Linq; -using System.Collections.Generic; - -using UnityEngine; - -using UnityExtension; - -public class OBJFace -{ - //------------------------------------------------------------------------------------------------------------ - private readonly List m_Vertices = new List(); - - //------------------------------------------------------------------------------------------------------------ - public void AddVertex(OBJFaceVertex lVertex) - { - m_Vertices.Add(lVertex); - } - - //------------------------------------------------------------------------------------------------------------ - public void ParseVertex(string lVertexString) - { - var fields = lVertexString.Split(new[] { '/' }, StringSplitOptions.None); - - var lIndex = fields[0].ParseInvariantInt(); - var faceVertex = new OBJFaceVertex - { - m_VertexIndex = lIndex - 1 - }; - - if (fields.Length > 1) - { - lIndex = fields[1].Length == 0 ? 0 : fields[1].ParseInvariantInt(); - faceVertex.m_UVIndex = lIndex - 1; - } - - if (fields.Length > 2) - { - lIndex = fields[2].Length == 0 ? 0 : fields[2].ParseInvariantInt(); - faceVertex.m_NormalIndex = lIndex - 1; - } - - if (fields.Length > 3) - { - lIndex = fields[3].Length == 0 ? 0 : fields[3].ParseInvariantInt(); - faceVertex.m_UV2Index = lIndex - 1; - } - - if (fields.Length > 4) - { - lIndex = fields[4].Length == 0 ? 0 : fields[4].ParseInvariantInt(); - faceVertex.m_ColorIndex = lIndex - 1; - } - - AddVertex(faceVertex); - } - - //------------------------------------------------------------------------------------------------------------ - public string ToString(int lIndex) - { - OBJFaceVertex lFaceVertex = m_Vertices[lIndex]; - - string lOutput = (lFaceVertex.m_VertexIndex + 1).ToString(); - - if (lFaceVertex.m_UVIndex > -1) - { - lOutput += string.Format("/{0}", (lFaceVertex.m_UVIndex + 1).ToString()); - } - - if (lFaceVertex.m_NormalIndex > -1) - { - lOutput += string.Format("/{0}", (lFaceVertex.m_NormalIndex + 1).ToString()); - } - - if (lFaceVertex.m_UV2Index > -1) - { - lOutput += string.Format("/{0}", (lFaceVertex.m_UV2Index + 1).ToString()); - } - - if (lFaceVertex.m_ColorIndex > -1) - { - lOutput += string.Format("/{0}", (lFaceVertex.m_ColorIndex + 1).ToString()); - } - - return lOutput; - } - - //------------------------------------------------------------------------------------------------------------ - public OBJFaceVertex this[int i] - { - get { return m_Vertices[i]; } - } - - //------------------------------------------------------------------------------------------------------------ - public int Count - { - get { return m_Vertices.Count; } - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta deleted file mode 100644 index 2be93ac..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 07402f6cbfe2d0e40ab4d7363cb0ed64 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs deleted file mode 100644 index b31a918..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs +++ /dev/null @@ -1,25 +0,0 @@ - -public class OBJFaceVertex -{ - //------------------------------------------------------------------------------------------------------------ - public int m_VertexIndex = -1; - public int m_UVIndex = -1; - public int m_UV2Index = -1; - public int m_NormalIndex = -1; - public int m_ColorIndex = -1; - - public override int GetHashCode() - { - return m_VertexIndex ^ m_UVIndex ^ m_UV2Index ^ m_NormalIndex ^ m_ColorIndex; - } - - public override bool Equals(object obj) - { - OBJFaceVertex faceVertex = (OBJFaceVertex)obj; - return m_VertexIndex == faceVertex.m_VertexIndex - && m_UVIndex == faceVertex.m_UVIndex - && m_UV2Index == faceVertex.m_UV2Index - && m_NormalIndex == faceVertex.m_NormalIndex - && m_ColorIndex == m_ColorIndex; - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta deleted file mode 100644 index 2278e77..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1f5cff977d3365a4f9f33933bb603037 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs deleted file mode 100644 index 581d4c9..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs +++ /dev/null @@ -1,27 +0,0 @@ - -using System.Collections.Generic; - -public class OBJGroup -{ - //------------------------------------------------------------------------------------------------------------ - private readonly List m_Faces = new List(); - - //------------------------------------------------------------------------------------------------------------ - public OBJGroup(string lName) - { - m_Name = lName; - } - - //------------------------------------------------------------------------------------------------------------ - public string m_Name { get; private set; } - public OBJMaterial m_Material { get; set; } - - //------------------------------------------------------------------------------------------------------------ - public IList Faces { get { return m_Faces; } } - - //------------------------------------------------------------------------------------------------------------ - public void AddFace(OBJFace lFace) - { - m_Faces.Add(lFace); - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta deleted file mode 100644 index 7bafc0e..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8508b6de42212c84ebaec559aed6c7b6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs deleted file mode 100644 index 7d2d1dc..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs +++ /dev/null @@ -1,219 +0,0 @@ - -using System; -using System.IO; -using System.Linq; -using System.Collections.Generic; - -using UnityEngine; - -using UnityExtension; - -/* - * Currently only supports Triangluar Meshes - */ - -public class OBJLoader -{ - //------------------------------------------------------------------------------------------------------------ - private static OBJData m_OBJData = null; - - //------------------------------------------------------------------------------------------------------------ - private static OBJMaterial m_CurrentMaterial = null; - private static OBJGroup m_CurrentGroup = null; - - #region PROCESSORS - - //------------------------------------------------------------------------------------------------------------ - private static readonly Dictionary> m_ParseOBJActionDictionary = new Dictionary> - { - { "mtllib", (lEntry) => { /*Load MTL*/ } }, - { "usemtl", (lEntry) => { PushOBJGroupIfNeeded(); m_CurrentGroup.m_Material = m_OBJData.m_Materials.SingleOrDefault((lX) => { return lX.m_Name.EqualsInvariantCultureIgnoreCase(lEntry); }); } }, - { "v", (lEntry) => { m_OBJData.m_Vertices.Add(Utils.ParseVector3String(lEntry)); } }, - { "vn", (lEntry) => { m_OBJData.m_Normals.Add(Utils.ParseVector3String(lEntry)); } }, - { "vt", (lEntry) => { m_OBJData.m_UVs.Add(Utils.ParseVector2String(lEntry)); } }, - { "vt2", (lEntry) => { m_OBJData.m_UV2s.Add(Utils.ParseVector2String(lEntry)); } }, - { "vc", (lEntry) => { m_OBJData.m_Colors.Add(Utils.ParseVector4String(lEntry).ToColor()); } }, - { "f", PushOBJFace }, - { "g", PushOBJGroup }, - }; - - //------------------------------------------------------------------------------------------------------------ - private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> - { - { "newmtl", PushOBJMaterial }, - { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, - { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, - { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, - { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, - { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, - { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, - { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, - { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, - { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, - { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, - { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, - { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, - { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, - }; - - #endregion - - #region PUBLIC_INTERFACE - - //------------------------------------------------------------------------------------------------------------ - public static OBJData LoadOBJ(Stream lStream) - { - m_OBJData = new OBJData(); - - m_CurrentMaterial = null; - m_CurrentGroup = null; - - StreamReader lLineStreamReader = new StreamReader(lStream); - - Action lAction = null; - string lCurrentLine = null; - string[] lFields = null; - string lKeyword = null; - string lData = null; - - while (!lLineStreamReader.EndOfStream) - { - lCurrentLine = lLineStreamReader.ReadLine(); - - if (StringExt.IsNullOrWhiteSpace(lCurrentLine) - || lCurrentLine[0] == '#') - { - continue; - } - - lFields = lCurrentLine.Trim().Split(null, 2); - if (lFields.Length < 2) - { - continue; - } - - lKeyword = lFields[0].Trim(); - lData = lFields[1].Trim(); - - lAction = null; - m_ParseOBJActionDictionary.TryGetValue(lKeyword.ToLowerInvariant(), out lAction); - - if (lAction != null) - { - lAction(lData); - } - } - - var lOBJData = m_OBJData; - m_OBJData = null; - - return lOBJData; - } - - //------------------------------------------------------------------------------------------------------------ - public static void ExportOBJ(OBJData lData, Stream lStream) - { - StreamWriter lLineStreamWriter = new StreamWriter(lStream); - - lLineStreamWriter.WriteLine(string.Format("# File exported by Unity3D version {0}", Application.unityVersion)); - - for (int lCount = 0; lCount < lData.m_Vertices.Count; ++lCount) - { - lLineStreamWriter.WriteLine(string.Format("v {0} {1} {2}", - lData.m_Vertices[lCount].x.ToString("n8"), - lData.m_Vertices[lCount].y.ToString("n8"), - lData.m_Vertices[lCount].z.ToString("n8"))); - } - - for (int lCount = 0; lCount < lData.m_UVs.Count; ++lCount) - { - lLineStreamWriter.WriteLine(string.Format("vt {0} {1}", - lData.m_UVs[lCount].x.ToString("n5"), - lData.m_UVs[lCount].y.ToString("n5"))); - } - - for (int lCount = 0; lCount < lData.m_UV2s.Count; ++lCount) - { - lLineStreamWriter.WriteLine(string.Format("vt2 {0} {1}", - lData.m_UVs[lCount].x.ToString("n5"), - lData.m_UVs[lCount].y.ToString("n5"))); - } - - for (int lCount = 0; lCount < lData.m_Normals.Count; ++lCount) - { - lLineStreamWriter.WriteLine(string.Format("vn {0} {1} {2}", - lData.m_Normals[lCount].x.ToString("n8"), - lData.m_Normals[lCount].y.ToString("n8"), - lData.m_Normals[lCount].z.ToString("n8"))); - } - - for (int lCount = 0; lCount < lData.m_Colors.Count; ++lCount) - { - lLineStreamWriter.WriteLine(string.Format("vc {0} {1} {2} {3}", - lData.m_Colors[lCount].r.ToString("n8"), - lData.m_Colors[lCount].g.ToString("n8"), - lData.m_Colors[lCount].b.ToString("n8"), - lData.m_Colors[lCount].a.ToString("n8"))); - } - - for (int lGroup = 0; lGroup < lData.m_Groups.Count; ++lGroup) - { - lLineStreamWriter.WriteLine(string.Format("g {0}", lData.m_Groups[lGroup].m_Name)); - - for (int lFace = 0; lFace < lData.m_Groups[lGroup].Faces.Count; ++lFace) - { - lLineStreamWriter.WriteLine(string.Format("f {0} {1} {2}", - lData.m_Groups[lGroup].Faces[lFace].ToString(0), - lData.m_Groups[lGroup].Faces[lFace].ToString(1), - lData.m_Groups[lGroup].Faces[lFace].ToString(2))); - } - } - - lLineStreamWriter.Flush(); - } - - #endregion - - //------------------------------------------------------------------------------------------------------------ - private static void PushOBJMaterial(string lMaterialName) - { - m_CurrentMaterial = new OBJMaterial(lMaterialName); - m_OBJData.m_Materials.Add(m_CurrentMaterial); - } - - //------------------------------------------------------------------------------------------------------------ - private static void PushOBJGroup(string lGroupName) - { - m_CurrentGroup = new OBJGroup(lGroupName); - m_OBJData.m_Groups.Add(m_CurrentGroup); - } - - //------------------------------------------------------------------------------------------------------------ - private static void PushOBJGroupIfNeeded() - { - if (m_CurrentGroup == null) - { - PushOBJGroup("default"); - } - } - - //------------------------------------------------------------------------------------------------------------ - 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); - } -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta deleted file mode 100644 index 8b6563d..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bda02739f6fbaeb4c8c3da925164b8cf -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs deleted file mode 100644 index b16438e..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs +++ /dev/null @@ -1,42 +0,0 @@ - -using UnityEngine; - -public class OBJMaterial -{ - //------------------------------------------------------------------------------------------------------------ - public OBJMaterial(string lMaterialName) - { - m_Name = lMaterialName; - } - - //------------------------------------------------------------------------------------------------------------ - public string m_Name; - - //------------------------------------------------------------------------------------------------------------ - public Color m_AmbientColor; - public Color m_DiffuseColor; - public Color m_SpecularColor; - public float m_SpecularCoefficient; - - //------------------------------------------------------------------------------------------------------------ - public float m_Transparency; - - //------------------------------------------------------------------------------------------------------------ - public int m_IlluminationModel; - - //------------------------------------------------------------------------------------------------------------ - public string m_AmbientTextureMap; - public string m_DiffuseTextureMap; - - //------------------------------------------------------------------------------------------------------------ - public string m_SpecularTextureMap; - public string m_SpecularHighlightTextureMap; - - //------------------------------------------------------------------------------------------------------------ - public string m_BumpMap; - public string m_DisplacementMap; - public string m_StencilDecalMap; - - //------------------------------------------------------------------------------------------------------------ - public string m_AlphaTextureMap; -} \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta deleted file mode 100644 index 1498dc6..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ceb2526c78b78c04592f312a4e65ec95 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Utils.meta b/unity/Assets/OBJ-IO/Plugins/Utils.meta deleted file mode 100644 index ea4d218..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Utils.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 94cd99f1df5fafa489e641d039f97273 -folderAsset: yes -DefaultImporter: - userData: diff --git a/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs b/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs deleted file mode 100644 index 463cfba..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs +++ /dev/null @@ -1,39 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -[StructLayout(LayoutKind.Explicit)] -public struct Int32Converter -{ - //------------------------------------------------------------------------------------------------------------ - [FieldOffset(0)] - public int Value; - [FieldOffset(0)] - public byte Byte1; - [FieldOffset(1)] - public byte Byte2; - [FieldOffset(2)] - public byte Byte3; - [FieldOffset(3)] - public byte Byte4; - - //------------------------------------------------------------------------------------------------------------ - public Int32Converter(int value) - { - Byte1 = Byte2 = Byte3 = Byte4 = 0; - Value = value; - } - - //------------------------------------------------------------------------------------------------------------ - public static implicit operator Int32(Int32Converter value) - { - return value.Value; - } - - //------------------------------------------------------------------------------------------------------------ - public static implicit operator Int32Converter(int value) - { - return new Int32Converter(value); - } -} diff --git a/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta b/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta deleted file mode 100644 index 641cf16..0000000 --- a/unity/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2980235c1e3576a4ab7dca278af19308 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/unity/Assets/OBJ-IO/Readme.txt b/unity/Assets/OBJ-IO/Readme.txt deleted file mode 100644 index d13fcf8..0000000 --- a/unity/Assets/OBJ-IO/Readme.txt +++ /dev/null @@ -1,36 +0,0 @@ - -/* * * * * * * * * * * * Author's note * * * * * * * * * * * * * *\ -* * -* ZZ$$Z$$$$Z$$$ * -* ZZZZZZZZZZZZZ * -* ZZZZZZZZZZZZZ * -* $ZZZZZZZZZZZZ * -* $ZZZZZZZZZZZZ * -* ZZ7=$OOO$?$ZO * -* Z7 $OZ IO * -* ZZZZZZZZOOOZOOOOOZZ8OZZZZZZZZZ * -* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * -* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * -* 8O8OOOOO8 88O88O8888888 D88888888 * -* 8OOOOOOO8 8OOON OO88 DO8888888 * -* DDDDDDDDD DDDD DDDD NDDDDDDDD * -* * -* http://octo-dev.co.uk * -* * -* OBJ-IO * -* * -* Copyright (c) Octo-Dev * -* * -\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -The scripts for this plugin are in [OBJ-IO/Plugins/OBJ] -and [OBJ-IO/Plugins/Extension]. - -There is an Example scene that Imports the Teapot OBJ at runtime, -distorts the vertexs and exports it again. The Export and Import -functions take System.IO.Stream as a parameter so this can be adapted -for your needs. - -The System Current only supports geometry. - -If there is any issue or bugs please contact : tim.leader.octo@gmail.com \ No newline at end of file diff --git a/unity/Assets/OBJ-IO/Readme.txt.meta b/unity/Assets/OBJ-IO/Readme.txt.meta deleted file mode 100644 index b1fc361..0000000 --- a/unity/Assets/OBJ-IO/Readme.txt.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: e1f277bf041647445ac3bf5b643a46fe -TextScriptImporter: - userData: From 39f0e4b0cdc3e9eed8a356a68f10609a2bbac0ca Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sat, 4 Apr 2015 18:13:12 -0700 Subject: [PATCH 09/14] Copying license into subtree --- LICENSE | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e06d208 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + From ceab5452f75550ad16871fb434b30aee61013251 Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sat, 4 Apr 2015 18:44:46 -0700 Subject: [PATCH 10/14] Upgrading to unity5 --- Editor.meta | 4 +- Editor/OBJEditor.cs.meta | 4 +- Examples.meta | 4 +- Examples/Meshes.meta | 4 +- Examples/Meshes/Materials.meta | 9 ++ Examples/Meshes/Materials/Teapot001Mat.mat | 145 ++++++++++++++++++ .../Meshes/Materials/Teapot001Mat.mat.meta | 8 + Examples/Meshes/Teapot.obj.meta | 9 +- Examples/Scenes.meta | 4 +- Examples/Scenes/Example.unity | Bin 18064 -> 7764 bytes Examples/Scenes/Example.unity.meta | 4 +- Examples/Scripts.meta | 4 +- Examples/Scripts/Example.cs.meta | 4 +- LICENSE.meta | 8 + Plugins.meta | 4 +- Plugins/Extension.meta | 4 +- Plugins/Extension/GameObjectExtension.cs.meta | 4 +- Plugins/Extension/MeshExtension.cs | 6 +- Plugins/Extension/MeshExtension.cs.meta | 4 +- Plugins/Extension/StringExtensions.cs.meta | 4 +- Plugins/Extension/Texture2DExtension.cs.meta | 4 +- Plugins/Extension/TransformExtension.cs.meta | 4 +- Plugins/Extension/UnityExtension.cs.meta | 4 +- Plugins/Extension/VectorExtension.cs.meta | 4 +- Plugins/Mesh.meta | 4 +- Plugins/Mesh/OBJ.meta | 4 +- Plugins/Mesh/OBJ/OBJData.cs.meta | 4 +- Plugins/Mesh/OBJ/OBJFace.cs.meta | 4 +- Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta | 4 +- Plugins/Mesh/OBJ/OBJGroup.cs.meta | 4 +- Plugins/Mesh/OBJ/OBJLoader.cs.meta | 4 +- Plugins/Mesh/OBJ/OBJMaterial.cs.meta | 4 +- Plugins/Utils.meta | 4 +- Plugins/Utils/Int32Converter.cs.meta | 4 +- Readme.txt.meta | 4 +- 35 files changed, 264 insertions(+), 33 deletions(-) create mode 100644 Examples/Meshes/Materials.meta create mode 100644 Examples/Meshes/Materials/Teapot001Mat.mat create mode 100644 Examples/Meshes/Materials/Teapot001Mat.mat.meta create mode 100644 LICENSE.meta diff --git a/Editor.meta b/Editor.meta index b944d9f..c3bb4f5 100644 --- a/Editor.meta +++ b/Editor.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 5c86e6fe65d4e4946b243172e73ba161 +guid: ba9cb60ce484c4b1092b2b70b583d7fc folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/OBJEditor.cs.meta b/Editor/OBJEditor.cs.meta index e0f5e91..728c0bd 100644 --- a/Editor/OBJEditor.cs.meta +++ b/Editor/OBJEditor.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 5cb377fb273c8634296cc421905b1d34 +guid: 844115d3abd794bb3ac1379b641b63e0 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples.meta b/Examples.meta index 0a599e9..2d822b2 100644 --- a/Examples.meta +++ b/Examples.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 33368388f581b994fab7f5ef248c0f63 +guid: 786bf829568704eeab3e43d11a3fed54 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Meshes.meta b/Examples/Meshes.meta index 616e31a..edc404d 100644 --- a/Examples/Meshes.meta +++ b/Examples/Meshes.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: e0433cb2bd36d3942883bf0f0998e2bb +guid: b431154bd41db4039a68d8da9687bbd0 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Meshes/Materials.meta b/Examples/Meshes/Materials.meta new file mode 100644 index 0000000..05b4998 --- /dev/null +++ b/Examples/Meshes/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 59eadbbc9d2af4f288f11a478b858118 +folderAsset: yes +timeCreated: 1428198132 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Meshes/Materials/Teapot001Mat.mat b/Examples/Meshes/Materials/Teapot001Mat.mat new file mode 100644 index 0000000..43c5780 --- /dev/null +++ b/Examples/Meshes/Materials/Teapot001Mat.mat @@ -0,0 +1,145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Teapot001Mat + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Cutoff + second: .5 + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Parallax + second: .0199999996 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: .5 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _EmissionScaleUI + second: 0 + data: + first: + name: _Mode + second: 0 + data: + first: + name: _Metallic + second: 0 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: .800000012, g: .800000012, b: .800000012, a: 1} + data: + first: + name: _EmissionColorUI + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Examples/Meshes/Materials/Teapot001Mat.mat.meta b/Examples/Meshes/Materials/Teapot001Mat.mat.meta new file mode 100644 index 0000000..8efb914 --- /dev/null +++ b/Examples/Meshes/Materials/Teapot001Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5eaa93adc3a1147b1ae7ea26b8a46fcf +timeCreated: 1428198132 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Meshes/Teapot.obj.meta b/Examples/Meshes/Teapot.obj.meta index 59c470a..65b2446 100644 --- a/Examples/Meshes/Teapot.obj.meta +++ b/Examples/Meshes/Teapot.obj.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 53158f4ed39ed53448df438bc212f7e8 +guid: 726e28207480a432ba2dcf770769eb61 ModelImporter: - serializedVersion: 16 + serializedVersion: 18 fileIDToRecycleName: 100000: //RootNode 100002: Teapot001 @@ -19,6 +19,7 @@ ModelImporter: legacyGenerateAnimations: 4 bakeSimulation: 0 optimizeGameObjects: 0 + motionNodeName: animationCompression: 1 animationRotationError: .5 animationPositionError: .5 @@ -37,11 +38,13 @@ ModelImporter: generateSecondaryUV: 0 useFileUnits: 1 optimizeMeshForGPU: 1 + keepQuads: 0 weldVertices: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 secondaryUVPackMargin: 4 + useFileScale: 0 tangentSpace: normalSmoothAngle: 60 splitTangentsAcrossUV: 1 @@ -64,3 +67,5 @@ ModelImporter: animationType: 0 additionalBone: 0 userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Scenes.meta b/Examples/Scenes.meta index 85f95e5..51862cd 100644 --- a/Examples/Scenes.meta +++ b/Examples/Scenes.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 141384ae82c22db4b8422ccbe172ef08 +guid: d837c72160cd14bfabf462529eaaac0a folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Scenes/Example.unity b/Examples/Scenes/Example.unity index 156264d29e19d85b0923324fbe0e7988e04d5ff9..9f63d452fa7e659f467027e5299c4c99a09b04c4 100644 GIT binary patch literal 7764 zcmd5>*>3Ab5`EWKFc0yQC2*BUy~*;XfgKByeS;tv7%j3TaZIr_T)ZThf1j$ZZnCx5 z86-Dj3$P{jT3yRIRm~rN8QtDkPS5H5ct5(beyD%2Dz+Ndd0M@BNiPe zVy_!nCr)P`^PJClRi*i=9Cj>g^LV%T7mus!G~t&SgGS4i&C_r5b5^mTrJrbAIVuYF zHne{Ir*5B$qGH)z`&}Gob(xC%j6Ln_XIbTjWf?CkIV9o5&qdBMN3bwgRe!F8*D!N)+E`v8zJVdGdYM zn&g#Mm}8#Y)GBCUAzp7;B~1rLS*97EoP!3*2-hqV^Qz$as#>Fg$P^hXc-u;ggL@bJ zk|lh;a3daWd=b94oF8OyB~DUcqy_Phk?(z4qBv$Y*rJMUp~@|Ka)3=W)*+&(b;p3C#8Ycfi3aJbq3S3^B)c{oRghj&|PZ z8QtBo*YmWj7$~JZ%#SIk=0bU2O4{mO{=Z;{w z2(Sa;xfc2|%^A3C1%_#tH5z9O(6z=r)q&bg=Q-N~*Fe|qmY_D609F`JA0A4G12{*} zP*K#kPJ+%)?D-am$~43~ZulO*!0HmiGkTv>x zqx3YN@fASWsNld%Bu~tWt^Qe?c`G{!~4L6Vk^!uS5 z4jj9KFh$7pE=u8=(*mG)0saNDs^JIbrZEVo1vt~bI~=hq2FB(Q{gM0`9=n!rOw?k! zNM2oVz3@nfm|Yoo3fb3mx;d4}WbKB=^> zDGi?%Vu9rsfl^yt$##_=(t%{lD390jR$;Gzl@U70HB4$HfH{EAp83PK zW{U|H8<0^~R};PKsIJ7rx1C&DmB3Apg3d6Kr_E1wPtY0?!G;rOy*D;z{87ewZwMFI>c~<1Pn0 z)U~^3a*N(!@Y&p=1yNyjgj>467myM6LpM5LnYK&87gEzM-Rw}4G0LEn9^QrE2Pg<{ zy^Kd-r1p_!{~5M%HLW`i5W7Be*tr$CIOA*foQnEu_}U(>QDS{?tvZj3bZdf&<4|^| zopR~1#UNgSC)$h9U-%9iuq5_^IPinmb^C@>B5G4zAOnrc&JdWK0-361`O+ulFZj9&63prkidihpAkZyY zoyi|B>iSbYto4;AJmHHSE6&obwar)#mjWOkks{W`%e_vdNNi4dmRMqGJ%dc}77E)y zvb9(hY`acl+TLujN_k;MMfEw~;$5t~JNOPYIu!_z^G%`tYnHud#fn$&z8s-$xCn$} zV+{)@*gRgJ&-Bmc9iX~G(3$NVvO_M$B7f$vKHU$~Wa^poE!_H2+1s;SN4-eXJZ56b zrzc_iZhs^T+exENtq&`F8te3c>j%CU`Bd0DcF*^q^bhpKAm(aD7DmYz-2(iD!rt!u E7w-of$^ZZW literal 18064 zcmeHPON=B(5v?&c*ydwC#{6N{KaBsMHTYo9cF)Z2&cKX!JiWU%XsvZkcTIP(JylJ0 z^?r;c_W^??B=7+te?VHFIN}?Ki$Ssl2V3$9Brf=X1l%lxkT2N8i^!;otg0EWjIb@3 zT-8)nW@Kh$WWa z$=#i+((~F{p53{>7w2iV|8yQvBWW^6_1Cg!Gu&7Uvna`>t>8i;KaVaXRG*=Lc$W?j z#KUNLk^6ZMC@3iro`q;F%mGq) z?>BTaZF#B8wM?Hs*B`Le+%pdkD%I&`@hHdedjYIp8A;R#GYD0teB7s1O z#(5Seed_UU5-%(9hndDvO`S-yEIbpm`7iYUBc_#^R>{*ielTKH`>1WiJ$DCT7WBeA z>>U2zI<9M@?qzbM#5>q-+MSJc);+)A=NeZe0W%FVigYB!0?}r=M)oMnvJ9HwC&oUWlF%8{h}43~T1j9303ms!0Fs3w~ODls(05 z1;cCUIA(?c(H;O&hlqkL!yfc`3<<+Fl+g~QzA$W2Ps^(ebx4X)0B$S-g1X9$2YU_N z*w96Lv)ow3)AG`h4&q^tRu1e(E%L#OKu4>P54b}2x?)(pqunG#jIrB-QGLtYSF`@ptM*Iyt)BpEUOHsJOwXZu8$)CG#4 zvrzDH;An8eAcJWTKuvb>u~>`#zpVuqhEbT64%x;UeTnoea?W_r(XSz=U%tWR7AXDlkjpJlYWX@LFJSj>iVeact^RsP zrREB*}$&^+HIunBiEAgf>X~ zSvVTRUB(~_u0c!M70FoA*#e9$zWQ8j9bb$_PF5CRm1;iD4}ejc$%V;qNIL?n;rIlz zt5B=c2Ux7&7}b`IEFWcC+`3@*dX)4c>@;AfiQBbct86fY3#kjg5quvGvwoDj3^tZo zS3w|pn<#vbAyUGcBe}eR$OXnri|afKR~Qoa7&wwc-R^LLojE5oroXa*9?B%+B7aod zIAHFkK>$msh;}!G_C0NF0^f}xw9}4lcMF|@II@LsoOcFcFFiG8{qbCbPfC~?(NfJ) zdrrYo>vrV|pl>T2EtBn?=C(Z-fvAL%#HxEacy<*I$AExCo15cEFx&>+Gr?IlU_m0m zaL;v6Ig-V2&vkg^5<{zxfF+=PB&jc$X?=v27g6mh7A$c%9M?7o(F~fbhP8Hs5H!Fx zXjXxwO|F8$N&7NUZPig|V_sBi9mKX^WIclt6{GA-HfT0zD&uY>Bem{91Xmv^T!NP2 zuFMr9wcbGc^e~7wY~i!j5omLi<#tNSP@gugdH-QP%)5j2G|d}=?~(~mLe?KBBQW356+B^j3d_fwJhBr0fAx<(+YLal9&1_p{&(Tx&zv9gipTQR;6c^o5!;C4BN77 z-GLH`YGaq5mW9iS+9{jWRi@{e)|B5m%SnFAm&p}&$nle9%8n3ty4q5^=PLD~j9f2| z;EN5^-emhdxD%mk8frlqI^8IVI#CXe#@l#9LiyK@b{27PfQ>;68;ONE zm3!5|v8qNn)3nOzE7TqejifVzXMxS)fC79YSrW^T3}P%@gE70L(TY{Z;I0bB=vnou zV9W)CUauxBiZX*d7oitQ%Aq#qDXHD*R>GQH*-afKvSUR+PXJqvwd$l$sXA7;Cgf{_ z%3d*6>y3zx6OXlstE68uWb24PuWfom_Pvp`TN|?Pl7y(}cRoB(YBn9(YMkfgLk8Ay z1;Ny8=ZtARG>pbM*M$K><*XkAIg)^Zk}svSQ3O(d*)s*DBi*32;bz#44i7Tg9Zo4~ z2fe=pnu44G5Ie|pz(6iiO!P`Fkv}>!|AC3}eC?i7izHbXCmHIAjEhNIWAAd#0dAs+Y^2sSOf!PgL5M zJyUNoUHf9=#O7++6JKwQoFSWf)HMRpE#mX9Ty{epG`j&YZw2W}jEzjHK#QVLLJ zxc}ano#N9neZX5f7K>y~RSR%h50k!(+=H-+KY?wxlYZ0swL&Qf(9w@Yo1jbfxQhUR zVBBqy!}O}C1ut8fB8yo%MMAP3jnm^um zC(&34EnaO$2!Lmeu_&d)7F*%w46167t?<)`s{UD>v?>BJAA>h-%DQlDF$+(@n{XsD z>$u_`-DEpD`nqgFJ0WLulXK+0pWb7uw5I&VV`5K;5%B}h-Q|{+o*M`BmUm-SEpS3v zgk)D$y2R@ar=(Xqa&U$OK~x+>aZ2j%!nQ!}w6~BE?Wpp^U&Dnie09&luCtGDYebt& zO#3B|cFJ$6pF+JJ_Tq^UU;C!Sr6pgt11-)YGCJvB_ORsoh8jot8?9S$%+$`Jkc}Uj za)U>EmgiR3mZPN`E9H2VatVlUYAAn*@^%-VyFbq$HGm=N&odsT=auMWG(^O)8YW?1 zcdOtCG%<$JOM?lY>$$~Gsk+*7;lj2(_Q&e4f)(f55d$XoB*$KWP4mj&X(0(?Yy?kl z9SkZ;HE*C&Vwnm}P@EFzc;#%;u8Tp5D%JA=cx~I1GFF@qc*|n6LP@*f;~+k(!D7z2 z9BvL&Xv#WB`HEZXGP$=hc2#7==5u_zA_l8SHL=+JRVAu-u1M)I;RTY^wu->pC$ur7 zwqIky3nZCO?3QC7AQV(_qSdD(MP+XF-R=y-F2- znJraBx^A6(?>1kVHIOcC_pzDJ$vl16*Nx`W)cugei&ZOJ3+=M!Uj2|&+P3>NwBx~Y zE|(#G>}tQ?kc}D}w(9p4A~%UcY_#f^%SMe2Q2lb*2D1^VU(Wk8%&k908=eMECNeGb zf%;H)!)$!&Q;FOp*qIF^iSdZMq^$!n{ebZxeB^zS&LqRBCjJE^|;MI}p3PZn~?MI7QIx_wHE`G{2oz8@(zdG3(wYyn5 z9(&s2JA0|avl@20lZonD88Z%j+Ue)}uZt3l=1-!q(sWg5z(EmlNrt zD@zaS_bOGgJ9}Y-;{>Mx2;STyM<~|s(>R)ggYEskS;kw3FY|)-eT$y8?sb&+8s$Aed2pV%uBW{Fh{-GI zd5^npKwZkS?cGRuFHs)&!&f^Q-EaQI_g62Z&K{v>?c)~8dyMjCDeoS4-AZ}SxIC;e zaot9FFS$I(3)f!Cdxi26dPaPK>vqa}fP`atAvVgSlY|@sG5U`M=tIAoCJFhv;~NA9 z^qJLh`b{GJ#w57?p4a|-*Wd16_|Cuf{_^@g5C1^g+4rm8{^`&&OJ95XXD@b+9ln0U zYrX8pe>&R=g6Uik{BGXl@1tjTP4}Uhi~n%Nol^eeg%@8~nbV8vf=&}X+v-#@Q8w(r}QCa#aNU)238F-bh#g*H@;#%i;f9*@c9Z|!Y>pWbRvsst6}Wi68?Y|ZR0AFZM)2^K7lVkZ@O>k@!z**FFV`1 z@2SUr?epqWR^N(grUDr39!CI!*2owJ4?{(Q0ppH(_{Qa}$`)+^TxMowSY}pMDwnxy zK($?htaeUlA9MHePue>Yg6<#Z-~Ox;(X-b!bXhN@+3C*Xas;s7m(TosCvq->zN$V0 ztN>a_05gCZ62R^uc?d7bP{{HH#b5EZ=>u?VIh%G$%#1n)O4=x75XkNHH+oG~(VLwQcM}K!<7!IbO;|I~5 USN{0?zB^vO`ZwB_+)K)T13r*o-2eap diff --git a/Examples/Scenes/Example.unity.meta b/Examples/Scenes/Example.unity.meta index 48a2af6..268f08e 100644 --- a/Examples/Scenes/Example.unity.meta +++ b/Examples/Scenes/Example.unity.meta @@ -1,4 +1,6 @@ fileFormatVersion: 2 -guid: 8573b7b1c7256de4896b3054d17de1b7 +guid: c325936dc7adc4f3bb77f962859b15d6 DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Scripts.meta b/Examples/Scripts.meta index 76c47cf..23577c8 100644 --- a/Examples/Scripts.meta +++ b/Examples/Scripts.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 6f612615b304fd249886c72faee156e0 +guid: 3c0d90c5589af493180ad1fefa4f0153 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples/Scripts/Example.cs.meta b/Examples/Scripts/Example.cs.meta index 0575581..8ad4d89 100644 --- a/Examples/Scripts/Example.cs.meta +++ b/Examples/Scripts/Example.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: f3ab7cfdf40b84b41a7adc35c545c226 +guid: 1e2ec9d5ccff9412aacafe3f21598101 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/LICENSE.meta b/LICENSE.meta new file mode 100644 index 0000000..7cac496 --- /dev/null +++ b/LICENSE.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01af7275c3b304df09fd1eff7782c52f +timeCreated: 1428198128 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins.meta b/Plugins.meta index 4870cb1..efe2b60 100644 --- a/Plugins.meta +++ b/Plugins.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 0a5ac41a41be22246b94c47885410104 +guid: 516c0f372429c43a7a8749f40c66c91d folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension.meta b/Plugins/Extension.meta index 5639c82..ab236ea 100644 --- a/Plugins/Extension.meta +++ b/Plugins/Extension.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 8c1f4314c6ab61442aeeb22e185f3614 +guid: 35f34ecbf995944519d1c3946461c536 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/GameObjectExtension.cs.meta b/Plugins/Extension/GameObjectExtension.cs.meta index 30e3794..c36c7ba 100644 --- a/Plugins/Extension/GameObjectExtension.cs.meta +++ b/Plugins/Extension/GameObjectExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 35b132c59c7910c4b99e560a0f9baf95 +guid: 922ffbce745934bb28921ad83b9bbafb MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/MeshExtension.cs b/Plugins/Extension/MeshExtension.cs index e8b117a..ab322fe 100644 --- a/Plugins/Extension/MeshExtension.cs +++ b/Plugins/Extension/MeshExtension.cs @@ -163,7 +163,7 @@ public static OBJData EncodeOBJ(this Mesh lMesh) m_Vertices = new List(lMesh.vertices), m_UVs = new List(lMesh.uv), m_Normals = new List(lMesh.normals), - m_UV2s = new List(lMesh.uv1), + m_UV2s = new List(lMesh.uv2), m_Colors = new List(lMesh.colors) }; @@ -299,7 +299,7 @@ public static bool LoadBinary(this Mesh lMesh, byte[] lData) Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); lHandle.Free(); lDataOffset += lDeltaOffset; - lMesh.uv1 = lUVs; + lMesh.uv2 = lUVs; Debug.Log("UV1 Count : " + lUVs.Length); lUVs = null; } @@ -463,7 +463,7 @@ public static byte[] EncodeBinary(this Mesh lMesh) lUVs = null; // UV Channel 1 - lUVs = lMesh.uv1; + lUVs = lMesh.uv2; if (lUVs.Length > 0) { lUV1Flag = true; diff --git a/Plugins/Extension/MeshExtension.cs.meta b/Plugins/Extension/MeshExtension.cs.meta index c9ff685..9971f71 100644 --- a/Plugins/Extension/MeshExtension.cs.meta +++ b/Plugins/Extension/MeshExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: a643d266ae55c8845ac48528640b7e8e +guid: d29be4e9040d24c388a09c305e45cc89 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/StringExtensions.cs.meta b/Plugins/Extension/StringExtensions.cs.meta index b911e8c..c18ae77 100644 --- a/Plugins/Extension/StringExtensions.cs.meta +++ b/Plugins/Extension/StringExtensions.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 5403d11ff2ec0124a9a20522559dfcfa +guid: df7a8256a715f4b82b30f994f88a5b84 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/Texture2DExtension.cs.meta b/Plugins/Extension/Texture2DExtension.cs.meta index 9b0d439..fa08ae8 100644 --- a/Plugins/Extension/Texture2DExtension.cs.meta +++ b/Plugins/Extension/Texture2DExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 9260066d99f960241b2a222401bcb685 +guid: da8ad03357fad477da9ebb4f7d39e1ed MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/TransformExtension.cs.meta b/Plugins/Extension/TransformExtension.cs.meta index 6075523..709f986 100644 --- a/Plugins/Extension/TransformExtension.cs.meta +++ b/Plugins/Extension/TransformExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: a8e76b9c1894ec743ae076720e775f49 +guid: a2e6c288a3dd0464aaf1927925a46e68 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/UnityExtension.cs.meta b/Plugins/Extension/UnityExtension.cs.meta index 2d06f8a..127e4e4 100644 --- a/Plugins/Extension/UnityExtension.cs.meta +++ b/Plugins/Extension/UnityExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 06a010ef6a1e94840a51827a2a02badc +guid: c0691a96323364f4393d63f3bcf6ed19 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Extension/VectorExtension.cs.meta b/Plugins/Extension/VectorExtension.cs.meta index 6c446b2..3ecbfa4 100644 --- a/Plugins/Extension/VectorExtension.cs.meta +++ b/Plugins/Extension/VectorExtension.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 18a26dda21abdf5468d5731a6dbd26c4 +guid: d0f0acfd31e1c422491ea1b7725d82d4 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh.meta b/Plugins/Mesh.meta index 6d5a2e1..8476138 100644 --- a/Plugins/Mesh.meta +++ b/Plugins/Mesh.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: da432757bf963174d97e5319c45db1dc +guid: 0fd6f5349c3ae434493614537f2f5764 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ.meta b/Plugins/Mesh/OBJ.meta index 218f11f..6b0df79 100644 --- a/Plugins/Mesh/OBJ.meta +++ b/Plugins/Mesh/OBJ.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: f74fe5c4c28267845b900549b670af26 +guid: a3463bfaa762e4f2f8ba11a8ac40ab59 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJData.cs.meta b/Plugins/Mesh/OBJ/OBJData.cs.meta index e9c7d65..ab980b5 100644 --- a/Plugins/Mesh/OBJ/OBJData.cs.meta +++ b/Plugins/Mesh/OBJ/OBJData.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 5c57f7fdab36a3f4d9d97f4785a884f6 +guid: 258a2ad8742224a6d874884fdb0f8b72 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJFace.cs.meta b/Plugins/Mesh/OBJ/OBJFace.cs.meta index 2be93ac..4003757 100644 --- a/Plugins/Mesh/OBJ/OBJFace.cs.meta +++ b/Plugins/Mesh/OBJ/OBJFace.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 07402f6cbfe2d0e40ab4d7363cb0ed64 +guid: fc4b69131377e461bbc1a54c5ed9aa2a MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta b/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta index 2278e77..e83c395 100644 --- a/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta +++ b/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 1f5cff977d3365a4f9f33933bb603037 +guid: 780a1b02c15904ebe8e4a311d551a423 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJGroup.cs.meta b/Plugins/Mesh/OBJ/OBJGroup.cs.meta index 7bafc0e..c8827c1 100644 --- a/Plugins/Mesh/OBJ/OBJGroup.cs.meta +++ b/Plugins/Mesh/OBJ/OBJGroup.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 8508b6de42212c84ebaec559aed6c7b6 +guid: b73631cec7ae341e881eb11738ac682a MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJLoader.cs.meta b/Plugins/Mesh/OBJ/OBJLoader.cs.meta index 8b6563d..2a50a63 100644 --- a/Plugins/Mesh/OBJ/OBJLoader.cs.meta +++ b/Plugins/Mesh/OBJ/OBJLoader.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: bda02739f6fbaeb4c8c3da925164b8cf +guid: 8988b7765bc8848ad9cc014f2dc24dc1 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Mesh/OBJ/OBJMaterial.cs.meta b/Plugins/Mesh/OBJ/OBJMaterial.cs.meta index 1498dc6..19cc575 100644 --- a/Plugins/Mesh/OBJ/OBJMaterial.cs.meta +++ b/Plugins/Mesh/OBJ/OBJMaterial.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: ceb2526c78b78c04592f312a4e65ec95 +guid: f48ae8c540e53442aa64567f17b19c4f MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Utils.meta b/Plugins/Utils.meta index ea4d218..772ecae 100644 --- a/Plugins/Utils.meta +++ b/Plugins/Utils.meta @@ -1,5 +1,7 @@ fileFormatVersion: 2 -guid: 94cd99f1df5fafa489e641d039f97273 +guid: 647b710cf66ab4166a87333ea326482a folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Plugins/Utils/Int32Converter.cs.meta b/Plugins/Utils/Int32Converter.cs.meta index 641cf16..f189d54 100644 --- a/Plugins/Utils/Int32Converter.cs.meta +++ b/Plugins/Utils/Int32Converter.cs.meta @@ -1,8 +1,10 @@ fileFormatVersion: 2 -guid: 2980235c1e3576a4ab7dca278af19308 +guid: e7cd059831df7451e9dca68dccc80a09 MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/Readme.txt.meta b/Readme.txt.meta index b1fc361..79f3e3a 100644 --- a/Readme.txt.meta +++ b/Readme.txt.meta @@ -1,4 +1,6 @@ fileFormatVersion: 2 -guid: e1f277bf041647445ac3bf5b643a46fe +guid: 98cadef99c27849dcb96875e62c7008c TextScriptImporter: userData: + assetBundleName: + assetBundleVariant: From aa7a4dafb9f007a394b0d21988b52e3ceba34e4a Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sat, 4 Apr 2015 18:47:24 -0700 Subject: [PATCH 11/14] Adding support to combine and export multiple meshes --- Editor/OBJEditor.cs | 70 ++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/Editor/OBJEditor.cs b/Editor/OBJEditor.cs index 2dba06e..5f487fd 100644 --- a/Editor/OBJEditor.cs +++ b/Editor/OBJEditor.cs @@ -1,50 +1,68 @@ - -using System; +using System; +using System.Collections.Generic; using System.IO; -using System.Collections; -using UnityEngine; using UnityEditor; - +using UnityEngine; using UnityExtension; + public class OBJWindow : EditorWindow { //------------------------------------------------------------------------------------------------------------ - private MeshFilter m_MeshFilter = null; - - //------------------------------------------------------------------------------------------------------------ - [MenuItem("OBJ-IO/OBJ Mesh Exporter")] - public static void Execute() - { - OBJWindow.GetWindow(); - } - - //------------------------------------------------------------------------------------------------------------ - private void OnGUI() - { - m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true); - - if (m_MeshFilter != null) + private GameObject m_root = null; + + //------------------------------------------------------------------------------------------------------------ + [MenuItem("OBJ-IO/OBJ Mesh Exporter")] + public static void Execute() + { + OBJWindow.GetWindow(); + } + + //------------------------------------------------------------------------------------------------------------ + private void OnGUI() + { + m_root = (GameObject)EditorGUILayout.ObjectField("Root", m_root, typeof(GameObject), true); + + if (m_root != null) { + var meshFilters = new List(); + meshFilters.AddRange(m_root.GetComponents()); + meshFilters.AddRange(m_root.GetComponentsInChildren()); + + Mesh mesh; + if (meshFilters.Count > 0) { + CombineInstance[] combine = new CombineInstance[meshFilters.Count]; + for (int i = 0; i < meshFilters.Count; ++i) { + combine[i].mesh = meshFilters[i].sharedMesh; + combine[i].transform = meshFilters[i].transform.localToWorldMatrix; + } + + mesh = new Mesh(); + mesh.CombineMeshes(combine); + mesh.Optimize(); + } else { + mesh = meshFilters[0].sharedMesh; + } + if (GUILayout.Button("Export OBJ")) { - var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj"); - + var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_root.name + ".obj", "obj"); + if (File.Exists(lOutputPath)) { File.Delete(lOutputPath); } - + var lStream = new FileStream(lOutputPath, FileMode.Create); - var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ(); + var lOBJData = mesh.EncodeOBJ(); OBJLoader.ExportOBJ(lOBJData, lStream); lStream.Close(); } } else { - GUILayout.Label("Please provide a MeshFilter"); + GUILayout.Label("Please provide a GameObject which contains (including it's children) at least on or more MeshFilter component"); } - } + } } From 6abf64e06c4c5527331ca270165546c2dfd531a8 Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sat, 4 Apr 2015 21:22:57 -0700 Subject: [PATCH 12/14] Adding contextual menus --- Editor/OBJEditor.cs | 104 +++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/Editor/OBJEditor.cs b/Editor/OBJEditor.cs index 5f487fd..02a235c 100644 --- a/Editor/OBJEditor.cs +++ b/Editor/OBJEditor.cs @@ -10,59 +10,91 @@ public class OBJWindow : EditorWindow { //------------------------------------------------------------------------------------------------------------ - private GameObject m_root = null; + private Transform m_root = null; //------------------------------------------------------------------------------------------------------------ - [MenuItem("OBJ-IO/OBJ Mesh Exporter")] + [MenuItem("Window/OBJ-IO Mesh Exporter")] public static void Execute() { OBJWindow.GetWindow(); } + [MenuItem("CONTEXT/Transform/OBJ-IO Export Mesh")] + public static void ExportTransform(MenuCommand command) + { + var selection = command.context as Transform; + ExportMesh(selection); + } + + [MenuItem("CONTEXT/Transform/OBJ-IO Export Mesh", true)] + public static bool CheckTransformExport(MenuCommand command) + { + var selection = command.context as Transform; + if (selection == null) + { + return false; + } + + return selection.GetComponent() != null || selection.GetComponentInChildren() != null; + } + + [MenuItem("CONTEXT/MeshFilter/OBJ-IO Export Mesh")] + public static void ExportMeshFilter(MenuCommand command) + { + var selection = command.context as MeshFilter; + ExportMesh(selection.transform); + } + + //------------------------------------------------------------------------------------------------------------ private void OnGUI() { - m_root = (GameObject)EditorGUILayout.ObjectField("Root", m_root, typeof(GameObject), true); + m_root = (Transform)EditorGUILayout.ObjectField("Root", m_root, typeof(Transform), true); - if (m_root != null) + if (m_root == null) { - var meshFilters = new List(); - meshFilters.AddRange(m_root.GetComponents()); - meshFilters.AddRange(m_root.GetComponentsInChildren()); - - Mesh mesh; - if (meshFilters.Count > 0) { - CombineInstance[] combine = new CombineInstance[meshFilters.Count]; - for (int i = 0; i < meshFilters.Count; ++i) { - combine[i].mesh = meshFilters[i].sharedMesh; - combine[i].transform = meshFilters[i].transform.localToWorldMatrix; - } - - mesh = new Mesh(); - mesh.CombineMeshes(combine); - mesh.Optimize(); - } else { - mesh = meshFilters[0].sharedMesh; - } + GUILayout.Label("Please provide a Transform which contains (including it's children) at least on or more MeshFilter component"); + return; + } - if (GUILayout.Button("Export OBJ")) - { - var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_root.name + ".obj", "obj"); + if (GUILayout.Button("Export OBJ")) + { + ExportMesh(m_root); + } + } - if (File.Exists(lOutputPath)) - { - File.Delete(lOutputPath); - } + private static void ExportMesh(Transform root) { + var meshFilters = new List(); + meshFilters.AddRange(root.GetComponents()); + meshFilters.AddRange(root.GetComponentsInChildren()); - var lStream = new FileStream(lOutputPath, FileMode.Create); - var lOBJData = mesh.EncodeOBJ(); - OBJLoader.ExportOBJ(lOBJData, lStream); - lStream.Close(); + Mesh mesh; + if (meshFilters.Count > 1) { + CombineInstance[] combine = new CombineInstance[meshFilters.Count]; + for (int i = 0; i < meshFilters.Count; ++i) { + combine[i].mesh = meshFilters[i].sharedMesh; + combine[i].transform = meshFilters[i].transform.localToWorldMatrix; } + + mesh = new Mesh(); + mesh.CombineMeshes(combine); + mesh.Optimize(); + } else if (meshFilters.Count > 0) { + mesh = meshFilters[0].sharedMesh; + } else { + return; } - else + + var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", root.name + ".obj", "obj"); + + if (File.Exists(lOutputPath)) { - GUILayout.Label("Please provide a GameObject which contains (including it's children) at least on or more MeshFilter component"); + File.Delete(lOutputPath); } - } + + var lStream = new FileStream(lOutputPath, FileMode.Create); + var lOBJData = mesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); +} } From 8f9b77f64eb931a5e3bea0b52975de4cfee9a8c7 Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Sun, 5 Apr 2015 01:03:02 -0700 Subject: [PATCH 13/14] Fixing single mesh case --- Editor/OBJEditor.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Editor/OBJEditor.cs b/Editor/OBJEditor.cs index 02a235c..c092e18 100644 --- a/Editor/OBJEditor.cs +++ b/Editor/OBJEditor.cs @@ -69,7 +69,7 @@ private static void ExportMesh(Transform root) { meshFilters.AddRange(root.GetComponentsInChildren()); Mesh mesh; - if (meshFilters.Count > 1) { + if (meshFilters.Count > 0) { CombineInstance[] combine = new CombineInstance[meshFilters.Count]; for (int i = 0; i < meshFilters.Count; ++i) { combine[i].mesh = meshFilters[i].sharedMesh; @@ -79,8 +79,7 @@ private static void ExportMesh(Transform root) { mesh = new Mesh(); mesh.CombineMeshes(combine); mesh.Optimize(); - } else if (meshFilters.Count > 0) { - mesh = meshFilters[0].sharedMesh; + mesh.name = root.name; } else { return; } From 5d97718a02c051f25cf5a5a05ef6ad44d17c1fb4 Mon Sep 17 00:00:00 2001 From: Samuel Cadieux Date: Tue, 7 Apr 2015 00:40:15 -0700 Subject: [PATCH 14/14] Fixing build warnings --- .../OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs | 4 +- .../OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs | 42 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs index b31a918..0ec2995 100644 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs +++ b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs @@ -20,6 +20,6 @@ public override bool Equals(object obj) && m_UVIndex == faceVertex.m_UVIndex && m_UV2Index == faceVertex.m_UV2Index && m_NormalIndex == faceVertex.m_NormalIndex - && m_ColorIndex == m_ColorIndex; + && m_ColorIndex == faceVertex.m_ColorIndex; } -} \ No newline at end of file +} diff --git a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs index 7d2d1dc..f746b88 100644 --- a/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs +++ b/unity/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs @@ -38,26 +38,26 @@ public class OBJLoader }; //------------------------------------------------------------------------------------------------------------ - private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> - { - { "newmtl", PushOBJMaterial }, - { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, - { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, - { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, - { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, - { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, - { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, - { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, - { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, - { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, - { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, - { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, - { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, - { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, - { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, - }; + // private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> + // { + // { "newmtl", PushOBJMaterial }, + // { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + // { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + // { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + // { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, + // { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + // { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + // { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, + // { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, + // { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, + // { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, + // { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, + // { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, + // { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + // { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + // { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, + // { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, + // }; #endregion @@ -216,4 +216,4 @@ private static void PushOBJFace(string lFaceLine) m_CurrentGroup.AddFace(face); } -} \ No newline at end of file +}