public static Root LoadModel(string inputPath, ExportFormat format) { switch (format) { case ExportFormat.GR2: { using (var fs = new FileStream(inputPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var root = new Root(); var gr2 = new GR2Reader(fs); gr2.Read(root); root.PostLoad(); return(root); } } case ExportFormat.DAE: { var importer = new ColladaImporter(); Root root = importer.Import(inputPath); return(root); } default: throw new ArgumentException("Invalid model format"); } }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); BoneWeights = ReadInfluences2(reader); BoneIndices = ReadInfluences2(reader); Normal = ReadVector3(reader); }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); BoneWeights = ReadInfluences2(reader); BoneIndices = ReadInfluences2(reader); TextureCoordinates0 = ReadVector2(reader); }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); Normal = ReadVector3(reader); TextureCoordinates0 = ReadVector2(reader); TextureCoordinates1 = ReadVector2(reader); }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); Normal = ReadVector3(reader); Tangent = ReadVector3(reader); Binormal = ReadVector3(reader); }
protected Vector2 ReadHalfVector2(GR2Reader reader) { Vector2 v; v.X = HalfHelpers.HalfToSingle(reader.Reader.ReadUInt16()); v.Y = HalfHelpers.HalfToSingle(reader.Reader.ReadUInt16()); return(v); }
public static Vector2 ReadVector2(GR2Reader reader) { Vector2 v; v.X = reader.Reader.ReadSingle(); v.Y = reader.Reader.ReadSingle(); return(v); }
protected Vector2 ReadVector2(GR2Reader reader) { Vector2 v; v.X = reader.Reader.ReadSingle(); v.Y = reader.Reader.ReadSingle(); return(v); }
protected Vector3 ReadVector3(GR2Reader reader) { Vector3 v; v.X = reader.Reader.ReadSingle(); v.Y = reader.Reader.ReadSingle(); v.Z = reader.Reader.ReadSingle(); return(v); }
public static Vector3 ReadHalfVector3(GR2Reader reader) { Vector3 v; v.X = HalfHelpers.HalfToSingle(reader.Reader.ReadUInt16()); v.Y = HalfHelpers.HalfToSingle(reader.Reader.ReadUInt16()); v.Z = HalfHelpers.HalfToSingle(reader.Reader.ReadUInt16()); return(v); }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); Normal = ReadVector3(reader); Tangent = ReadVector3(reader); Binormal = ReadVector3(reader); DiffuseColor0 = ReadVector4(reader); TextureCoordinates0 = ReadVector2(reader); }
public static Vector4 ReadNormalByteVector4(GR2Reader reader) { Vector4 v; v.X = reader.Reader.ReadByte() * 255.0f; v.Y = reader.Reader.ReadByte() * 255.0f; v.Z = reader.Reader.ReadByte() * 255.0f; v.W = reader.Reader.ReadByte() * 255.0f; return(v); }
public static BoneWeight ReadInfluences(GR2Reader reader) { BoneWeight v; v.A = reader.Reader.ReadByte(); v.B = reader.Reader.ReadByte(); v.C = reader.Reader.ReadByte(); v.D = reader.Reader.ReadByte(); return(v); }
public static Quaternion ReadBinormalShortVector4(GR2Reader reader) { Quaternion v = new Quaternion(); v.X = reader.Reader.ReadInt16() / 32767.0f; v.Y = reader.Reader.ReadInt16() / 32767.0f; v.Z = reader.Reader.ReadInt16() / 32767.0f; v.W = reader.Reader.ReadInt16() / 32767.0f; return(v); }
public static Vector3 ReadBinormalShortVector4As3(GR2Reader reader) { Vector3 v; v.X = reader.Reader.ReadInt16() / 32767.0f; v.Y = reader.Reader.ReadInt16() / 32767.0f; v.Z = reader.Reader.ReadInt16() / 32767.0f; reader.Reader.ReadInt16(); return(v); }
public static Vector4 ReadVector4(GR2Reader reader) { Vector4 v; v.X = reader.Reader.ReadSingle(); v.Y = reader.Reader.ReadSingle(); v.Z = reader.Reader.ReadSingle(); v.W = reader.Reader.ReadSingle(); return(v); }
protected BoneWeight ReadInfluences(GR2Reader reader) { BoneWeight v; v.A = reader.Reader.ReadByte(); v.B = reader.Reader.ReadByte(); v.C = reader.Reader.ReadByte(); v.D = reader.Reader.ReadByte(); return(v); }
protected Vector4 ReadVector4(GR2Reader reader) { Vector4 v; v.X = reader.Reader.ReadSingle(); v.Y = reader.Reader.ReadSingle(); v.Z = reader.Reader.ReadSingle(); v.W = reader.Reader.ReadSingle(); return(v); }
public object Read(GR2Reader reader, StructDefinition definition, MemberDefinition member, uint arraySize, object parent) { Type type; if (!VertexTypeCache.TryGetValue(parent, out type)) { type = SelectType(member, definition, parent); VertexTypeCache.Add(parent, type); } var vertex = Helpers.CreateInstance(type); (vertex as Vertex).Unserialize(reader); return(vertex); }
public object Read(GR2Reader reader, StructDefinition definition, MemberDefinition member, uint arraySize, object parent) { VertexDescriptor descriptor; if (!VertexTypeCache.TryGetValue(parent, out descriptor)) { descriptor = ConstructDescriptor(member, definition, parent); VertexTypeCache.Add(parent, descriptor); } var vertex = descriptor.CreateInstance(); vertex.Unserialize(reader); return(vertex); }
/// <summary> /// Opens filename, reading it as a GR2 file and returning back a new suitable name. /// Returns an empty string if no suitable name was found. /// </summary> public static string GetGR2Name(string filename) { using (var fs = File.OpenRead(filename)) { GR2Reader gr2Reader = new GR2Reader(fs); Root root = new Root(); gr2Reader.Read(root); gr2Reader.Dispose(); if (root.Meshes?.Count > 0) { return(root.Meshes[0].Name); } else if (root.Animations?.Count > 0) { return($"ANIM_{root.Animations[0].Name}"); } else if (root.Skeletons?.Count > 0) { return($"SKELETONS_{root.Skeletons.Count}:{root.Skeletons[0].Bones?.Count}"); } return(""); } }
public override void Unserialize(GR2Reader reader) { Position = ReadVector3(reader); }
public static Matrix3 ReadQTangent(GR2Reader reader) { Quaternion qTangent = ReadBinormalShortVector4(reader); return(QTangentToMatrix(qTangent)); }
public void Unserialize(GR2Reader reader) { VertexSerializationHelpers.Unserialize(reader, this); }
public static void Unserialize(GR2Reader reader, Vertex v) { var d = v.Format; if (d.HasPosition) { v.Position = ReadVector3(reader); } if (d.HasBoneWeights) { if (d.NumBoneInfluences == 2) { v.BoneWeights = ReadInfluences2(reader); v.BoneIndices = ReadInfluences2(reader); } else { v.BoneWeights = ReadInfluences(reader); v.BoneIndices = ReadInfluences(reader); } } switch (d.NormalType) { case NormalType.None: break; case NormalType.Float3: v.Normal = ReadVector3(reader); break; case NormalType.Half4: v.Normal = ReadHalfVector4As3(reader); break; case NormalType.QTangent: { var qTangent = ReadQTangent(reader); v.Normal = qTangent.Row2; v.Tangent = qTangent.Row1; v.Binormal = qTangent.Row0; break; } } switch (d.TangentType) { case NormalType.None: break; case NormalType.Float3: v.Tangent = ReadVector3(reader); break; case NormalType.Half4: v.Tangent = ReadHalfVector4As3(reader); break; case NormalType.QTangent: break; // Tangent read from QTangent } switch (d.BinormalType) { case NormalType.None: break; case NormalType.Float3: v.Binormal = ReadVector3(reader); break; case NormalType.Half4: v.Binormal = ReadHalfVector4As3(reader); break; case NormalType.QTangent: break; // Binormal read from QTangent } if (d.ColorMaps > 0) { for (var i = 0; i < d.ColorMaps; i++) { Vector4 color; switch (d.ColorMapType) { case ColorMapType.Float4: color = ReadVector4(reader); break; case ColorMapType.Byte4: color = ReadNormalByteVector4(reader); break; default: throw new Exception($"Cannot unserialize color map: Unsupported format {d.ColorMapType}"); } v.SetColor(i, color); } } if (d.TextureCoordinates > 0) { for (var i = 0; i < d.TextureCoordinates; i++) { Vector2 uv; switch (d.TextureCoordinateType) { case TextureCoordinateType.Float2: uv = ReadVector2(reader); break; case TextureCoordinateType.Half2: uv = ReadHalfVector2(reader); break; default: throw new Exception($"Cannot unserialize UV map: Unsupported format {d.TextureCoordinateType}"); } v.SetUV(i, uv); } } }
public static void Unserialize(GR2Reader reader, Vertex v) { var d = v.Format; if (d.HasPosition) { v.Position = ReadVector3(reader); } if (d.HasBoneWeights) { if (d.NumBoneInfluences == 2) { v.BoneWeights = ReadInfluences2(reader); v.BoneIndices = ReadInfluences2(reader); } else { v.BoneWeights = ReadInfluences(reader); v.BoneIndices = ReadInfluences(reader); } } switch (d.NormalType) { case NormalType.None: break; case NormalType.Float3: v.Normal = ReadVector3(reader); break; case NormalType.Half4: v.Normal = ReadHalfVector4As3(reader); break; case NormalType.Short4: v.Normal = ReadBinormalShortVector4As3(reader); break; } switch (d.TangentType) { case NormalType.None: break; case NormalType.Float3: v.Tangent = ReadVector3(reader); break; case NormalType.Half4: v.Tangent = ReadHalfVector4As3(reader); break; case NormalType.Short4: v.Tangent = ReadBinormalShortVector4As3(reader); break; } switch (d.BinormalType) { case NormalType.None: break; case NormalType.Float3: v.Binormal = ReadVector3(reader); break; case NormalType.Half4: v.Binormal = ReadHalfVector4As3(reader); break; case NormalType.Short4: v.Binormal = ReadBinormalShortVector4As3(reader); break; } switch (d.DiffuseType) { case DiffuseColorType.None: break; case DiffuseColorType.Float4: v.DiffuseColor0 = ReadVector4(reader); break; case DiffuseColorType.Byte4: v.DiffuseColor0 = ReadNormalByteVector4(reader); break; } if (d.TextureCoordinates > 0) { switch (d.TextureCoordinateType) { case TextureCoordinateType.None: break; case TextureCoordinateType.Float2: v.TextureCoordinates0 = ReadVector2(reader); break; case TextureCoordinateType.Half2: v.TextureCoordinates0 = ReadHalfVector2(reader); break; } if (d.TextureCoordinates > 1) { switch (d.TextureCoordinateType) { case TextureCoordinateType.None: break; case TextureCoordinateType.Float2: v.TextureCoordinates1 = ReadVector2(reader); break; case TextureCoordinateType.Half2: v.TextureCoordinates1 = ReadHalfVector2(reader); break; } } } }
public abstract void Unserialize(GR2Reader reader);