private string CreateObjects()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("; Objects information").Append(Token.EOL);
            sb.Append("; ----------").Append(Token.EOL);

            FbxNode objectsNode = new FbxNode("Objects", "");

            if (!multipleMesh)
            {
                objectsNode.AddSubNode(CreateModelNode());
            }
            else
            {
                for (int i = 0; i < meshes.Length; ++i)
                {
                    mesh = meshes[i];
                    objectsNode.AddSubNode(CreateModelNode());
                }
            }

            if (material != null)
            {
                objectsNode.AddSubNode(CreateMaterialDefinitionNode());
            }

            if (material != null && material.mainTexture != null)
            {
                objectsNode.AddSubNode(CreateTextureDefinitionNode());
            }

            sb.Append(objectsNode.ToString());
            return(sb.ToString());
        }
        private string CreateHeader()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("; FBX 6.1.0 project file").Append(Token.EOL); //file magic string
            //sb.Append("; ").Append("Low Poly Terrain Pack").Append(Token.EOL);
            sb.Append("; http://pinwheel.studio").Append(Token.EOL);
            sb.Append("; ----------").Append(Token.EOL);

            FbxNode headerExtensionNode = new FbxNode("FBXHeaderExtension", "")
                                          .AddProperty("FBXHeaderVersion", FBX_HEADER_VERSION)
                                          .AddProperty("FBXVersion", FBX_VERSION)
                                          .AddProperty("Creator", string.Format("\"{0}\"", "Pinwheel Studio"));

            DateTime creationTime     = DateTime.Now;
            FbxNode  creationTimeNode = new FbxNode("CreationTimeStamp", "")
                                        .AddProperty("Version", "1000")
                                        .AddProperty("Year", creationTime.Year)
                                        .AddProperty("Month", creationTime.Month)
                                        .AddProperty("Day", creationTime.Day)
                                        .AddProperty("Hour", creationTime.Hour)
                                        .AddProperty("Minute", creationTime.Minute)
                                        .AddProperty("Second", creationTime.Second)
                                        .AddProperty("Millisecond", creationTime.Millisecond);

            FbxNode otherFlagNode = new FbxNode("OtherFlags", "")
                                    .AddProperty("FlagPLE", 0);

            headerExtensionNode.AddSubNode(creationTimeNode);
            headerExtensionNode.AddSubNode(otherFlagNode);

            sb.Append(headerExtensionNode.ToString());
            return(sb.ToString());
        }
        private FbxNode CreateModelNode()
        {
            FbxNode modelNode = new FbxNode("Model", string.Format("\"Model::{0}\", \"Mesh\"", mesh.name))
                                .AddProperty("Version", 232)
                                .AddProperty("MultiLayer", 0)
                                .AddProperty("Shading", "Y")
                                .AddProperty("Culling", "\"Culling Off\"")
                                .AddProperty("Vertices", ListVertices())
                                .AddProperty("PolygonVertexIndex", ListTriangles())
                                .AddProperty("GeometryVersion", 124)
                                .AddSubNode(CreateNormalsNode())
                                .AddSubNode(CreateUvNode())
                                .AddSubNode(CreateColorsNode())
                                .AddSubNode(CreateMaterialNode());

            if (material != null && material.mainTexture != null)
            {
                modelNode.AddSubNode(CreateTextureNode());
            }

            modelNode.AddSubNode(CreateLayerNode());
            return(modelNode);
        }
        private string CreateObjects()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("; Objects information").Append(Token.EOL);
            sb.Append("; ----------").Append(Token.EOL);

            FbxNode objectsNode = new FbxNode("Objects", "")
                                  .AddSubNode(CreateModelNode());

            if (material != null)
            {
                objectsNode.AddSubNode(CreateMaterialDefinitionNode());
            }

            if (material != null && material.mainTexture != null)
            {
                objectsNode.AddSubNode(CreateTextureDefinitionNode());
            }

            sb.Append(objectsNode.ToString());
            return(sb.ToString());
        }
        private FbxNode CreateGlobalSettingsNode()
        {
            FbxNode globalSettingsNode = new FbxNode("GlobalSettings", "")
                                         .AddProperty("Version", 1000);
            FbxNode globalSettingProperties60Node = new FbxNode("Properties60", "")
                                                    .AddProperty("Property", "\"UpAxis\", \"int\", \"\", 1")
                                                    .AddProperty("Property", "\"UpAxisSign\", \"int\", \"\", 1")
                                                    .AddProperty("Property", "\"FrontAxis\", \"int\", \"\", 2")
                                                    .AddProperty("Property", "\"FrontAxisSign\", \"int\", \"\", 1")
                                                    .AddProperty("Property", "\"CoordAxis\", \"int\", \"\", 0")
                                                    .AddProperty("Property", "\"CoordAxisSign\", \"int\", \"\", 1")
                                                    .AddProperty("Property", "\"UnitScaleFactor\", \"double\", \"\", 1");

            globalSettingsNode.AddSubNode(globalSettingProperties60Node);
            return(globalSettingsNode);
        }