Axiom.Serialization.MeshSerializerImpl.WriteMesh C# (CSharp) Метод

WriteMesh() защищенный Метод

protected WriteMesh ( BinaryWriter writer ) : void
writer System.IO.BinaryWriter
Результат void
		protected void WriteMesh( BinaryWriter writer )
		{
			// cache header location
			long start_offset = writer.Seek( 0, SeekOrigin.Current );

			// Header
			WriteChunk( writer, MeshChunkID.Mesh, 0 );

			// bool skeletallyAnimated
			WriteBool( writer, mesh.HasSkeleton );

			// Write shared geometry
			if ( mesh.SharedVertexData != null )
			{
				WriteGeometry( writer, mesh.SharedVertexData );
			}

			// Write Submeshes
			for ( int i = 0; i < mesh.SubMeshCount; ++i )
			{
				SubMesh subMesh = mesh.GetSubMesh( i );
				LogManager.Instance.Write( "Writing submesh {0} ...", subMesh.Name );
				WriteSubMesh( writer, subMesh );
				LogManager.Instance.Write( "Submesh exported." );
			}

			// Write skeleton info if required
			if ( mesh.Skeleton != null )
			{
				// Write skeleton link
				LogManager.Instance.Write( "Exporting skeleton link..." );
				WriteSkeletonLink( writer );
				LogManager.Instance.Write( "Skeleton link exported." );

				// Write bone assignments
				LogManager.Instance.Write( "Exporting shared geometry bone assignments..." );
				Dictionary<int, List<VertexBoneAssignment>> weights = mesh.BoneAssignmentList;
				foreach ( int v in weights.Keys )
				{
					List<VertexBoneAssignment> vbaList = weights[ v ];
					foreach ( VertexBoneAssignment vba in vbaList )
						WriteMeshBoneAssignment( writer, vba );
				}
				LogManager.Instance.Write( "Shared geometry bone assignments exported." );
			}

			// Write LOD data if any
			if ( mesh.LodLevelCount > 1 )
			{
				LogManager.Instance.Write( "Exporting LOD information..." );
				this.WriteMeshLodInfo( writer );
				LogManager.Instance.Write( "LOD information exported." );
			}

			// Write Bounds information
			LogManager.Instance.Write( "Exporting bounds Information..." );
			WriteMeshBounds( writer );
			LogManager.Instance.Write( "Bounds information exported." );

			// Write submesh name table
			LogManager.Instance.Write( "Exporting submesh name table..." );
			WriteSubMeshNameTable( writer );
			LogManager.Instance.Write( "Submesh name table exported." );

			// Write edge lists
			LogManager.Instance.Write( "Exporting edge lists..." );
			//WriteEdgeLists( writer );
			LogManager.Instance.Write( "Edge lists exported." );

			//Write morph animation
			LogManager.Instance.Write( "Exporting morph animations..." );
			if ( mesh.PoseList.Count > 0 )
				WritePoses( writer );
			if ( mesh.HasVertexAnimation )
				WriteAnimations( writer );
			LogManager.Instance.Write( "Morph animations exported." );

			// Write submesh extremes
			LogManager.Instance.Write( "Exporting submesh extremes..." );
			//WriteExtremes( writer );
			LogManager.Instance.Write( "Submesh extremes information exported." );

			// Write Attachment Points
			LogManager.Instance.Write( "Exporting attachment points..." );
			foreach ( AttachmentPoint ap in mesh.AttachmentPoints )
				WriteAttachmentPoint( writer, ap );
			LogManager.Instance.Write( "Attachment points exported." );

			// Some ending stuff...
			long end_offset = writer.Seek( 0, SeekOrigin.Current );
			writer.Seek( (int)start_offset, SeekOrigin.Begin );
			WriteChunk( writer, MeshChunkID.Mesh, (int)( end_offset - start_offset ) );
			writer.Seek( (int)end_offset, SeekOrigin.Begin );
		}