public FaceInfo( BinaryReader reader ) { Vertex1 = reader.ReadUInt16(); Vertex0 = reader.ReadUInt16(); Flags = (GeometryFlag) reader.ReadUInt16(); Vertex2 = reader.ReadUInt16(); }
public FaceInfo(BinaryReader reader) { Vertex1 = reader.ReadUInt16(); Vertex0 = reader.ReadUInt16(); Flags = (GeometryFlag)reader.ReadUInt16(); Vertex2 = reader.ReadUInt16(); }
public GeometrySectionData( SectionHeader header, FramedStream stream ) { SectionHeader dataHeader = new SectionHeader( stream ); BinaryReader reader = new BinaryReader( stream ); Flags = (GeometryFlag) reader.ReadUInt16(); reader.ReadUInt16(); // Unknown FaceCount = reader.ReadUInt32(); VertexCount = reader.ReadUInt32(); FrameCount = reader.ReadUInt32(); if ( dataHeader.Version == 4099 ) { Ambient = reader.ReadSingle(); Diffuse = reader.ReadSingle(); Specular = reader.ReadSingle(); } if ( ( Flags & GeometryFlag.Colors ) != 0 ) { Colours = new Color4[ VertexCount ]; for ( int i = 0; i < VertexCount; ++i ) { byte r = reader.ReadByte(); byte g = reader.ReadByte(); byte b = reader.ReadByte(); byte a = reader.ReadByte(); Colours[ i ] = new Color4( r, g, b, a ); } } if ( ( Flags & GeometryFlag.TexCoords ) != 0 ) { TexCoords = new Vector2[ VertexCount ]; for ( int i = 0; i < VertexCount; ++i ) TexCoords[ i ] = reader.ReadVector2(); } Faces = new FaceInfo[ FaceCount ]; for ( int i = 0; i < FaceCount; ++i ) Faces[ i ] = new FaceInfo( reader ); BoundingSphere = new BoundingSphere( reader ); HasPosition = reader.ReadUInt32(); HasNormals = reader.ReadUInt32(); if ( HasPosition > 1 || HasNormals > 1 ) throw new Exception( "Well there you go" ); Vertices = new Vector3[ VertexCount ]; for ( int i = 0; i < VertexCount; ++i ) Vertices[ i ] = reader.ReadVector3(); if ( ( Flags & GeometryFlag.Normals ) != 0 ) { Normals = new Vector3[ VertexCount ]; for ( int i = 0; i < VertexCount; ++i ) Normals[ i ] = reader.ReadVector3(); } Materials = ( new Section( stream ).Data as MaterialListSectionData ).Materials; SectionHeader extHeader = new SectionHeader( stream ); MaterialSplitSectionData msplits = new Section( stream ).Data as MaterialSplitSectionData; MaterialSplits = msplits.MaterialSplits; FaceCount = msplits.FaceCount; IndexCount = msplits.IndexCount; foreach ( MaterialSplit mat in MaterialSplits ) mat.Material = Materials[ mat.MaterialIndex ]; }
public Geometry(SectionHeader header, Stream stream) : base(header, stream) { var dataHeader = SectionHeader.Read(stream); var reader = new BinaryReader(stream); Flags = (GeometryFlag)reader.ReadUInt16(); var uvCount = reader.ReadByte(); // uv count reader.ReadByte(); // native flags FaceCount = reader.ReadUInt32(); VertexCount = reader.ReadUInt32(); FrameCount = reader.ReadUInt32(); if (dataHeader.Version == 4099) { Ambient = reader.ReadSingle(); Diffuse = reader.ReadSingle(); Specular = reader.ReadSingle(); } if ((Flags & GeometryFlag.Colors) != 0) { Colours = new Color4[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Colours[i] = new Color4(reader); } } if ((Flags & (GeometryFlag.TexCoords | GeometryFlag.TexCoords2)) != 0) { TexCoords = new Vector2[uvCount][]; for (var j = 0; j < uvCount; ++j) { var uvs = TexCoords[j] = new Vector2[VertexCount]; for (var i = 0; i < VertexCount; ++i) { uvs[i] = new Vector2(reader); } } } Faces = new FaceInfo[FaceCount]; for (var i = 0; i < FaceCount; ++i) { Faces[i] = new FaceInfo(reader); } BoundingSphere = new BoundingSphere(reader); HasPosition = reader.ReadUInt32(); HasNormals = reader.ReadUInt32(); if (HasPosition > 1 || HasNormals > 1) { throw new Exception("Well there you go"); } if ((Flags & GeometryFlag.VertexTranslation) != 0) { Vertices = new Vector3[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Vertices[i] = new Vector3(reader); } } if ((Flags & GeometryFlag.Normals) != 0) { Normals = new Vector3[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Normals[i] = new Vector3(reader); } } Materials = ReadSection <MaterialList>().Materials; var extensions = ReadSection <Extension>(); MaterialSplits = extensions.FirstOrDefault <MaterialSplitList>().MaterialSplits; Skinning = extensions.FirstOrDefault <Skin>(); }
public GeometrySectionData(SectionHeader header, FramedStream stream) { SectionHeader dataHeader = new SectionHeader(stream); BinaryReader reader = new BinaryReader(stream); Flags = (GeometryFlag)reader.ReadUInt16(); reader.ReadUInt16(); // Unknown FaceCount = reader.ReadUInt32(); VertexCount = reader.ReadUInt32(); FrameCount = reader.ReadUInt32(); if (dataHeader.Version == 4099) { Ambient = reader.ReadSingle(); Diffuse = reader.ReadSingle(); Specular = reader.ReadSingle(); } if ((Flags & GeometryFlag.Colors) != 0) { Colours = new Color4[VertexCount]; for (int i = 0; i < VertexCount; ++i) { byte r = reader.ReadByte(); byte g = reader.ReadByte(); byte b = reader.ReadByte(); byte a = reader.ReadByte(); Colours[i] = new Color4(r, g, b, a); } } if ((Flags & GeometryFlag.TexCoords) != 0) { TexCoords = new Vector2[VertexCount]; for (int i = 0; i < VertexCount; ++i) { TexCoords[i] = reader.ReadVector2(); } } Faces = new FaceInfo[FaceCount]; for (int i = 0; i < FaceCount; ++i) { Faces[i] = new FaceInfo(reader); } BoundingSphere = new BoundingSphere(reader); HasPosition = reader.ReadUInt32(); HasNormals = reader.ReadUInt32(); if (HasPosition > 1 || HasNormals > 1) { throw new Exception("Well there you go"); } Vertices = new Vector3[VertexCount]; for (int i = 0; i < VertexCount; ++i) { Vertices[i] = reader.ReadVector3(); } if ((Flags & GeometryFlag.Normals) != 0) { Normals = new Vector3[VertexCount]; for (int i = 0; i < VertexCount; ++i) { Normals[i] = reader.ReadVector3(); } } Materials = (new Section(stream).Data as MaterialListSectionData).Materials; SectionHeader extHeader = new SectionHeader(stream); MaterialSplitSectionData msplits = new Section(stream).Data as MaterialSplitSectionData; MaterialSplits = msplits.MaterialSplits; FaceCount = msplits.FaceCount; IndexCount = msplits.IndexCount; foreach (MaterialSplit mat in MaterialSplits) { mat.Material = Materials[mat.MaterialIndex]; } }
public Geometry(SectionHeader header, Stream stream) : base(header, stream) { var dataHeader = SectionHeader.Read(stream); var reader = new BinaryReader(stream); Flags = (GeometryFlag) reader.ReadUInt16(); var uvCount = reader.ReadByte(); // uv count reader.ReadByte(); // native flags FaceCount = reader.ReadUInt32(); VertexCount = reader.ReadUInt32(); FrameCount = reader.ReadUInt32(); if (dataHeader.Version == 4099) { Ambient = reader.ReadSingle(); Diffuse = reader.ReadSingle(); Specular = reader.ReadSingle(); } if ((Flags & GeometryFlag.Colors) != 0) { Colours = new Color4[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Colours[i] = new Color4(reader); } } if ((Flags & (GeometryFlag.TexCoords | GeometryFlag.TexCoords2)) != 0) { TexCoords = new Vector2[uvCount][]; for (var j = 0; j < uvCount; ++j) { var uvs = TexCoords[j] = new Vector2[VertexCount]; for (var i = 0; i < VertexCount; ++i) { uvs[i] = new Vector2(reader); } } } Faces = new FaceInfo[FaceCount]; for (var i = 0; i < FaceCount; ++i) { Faces[i] = new FaceInfo(reader); } BoundingSphere = new BoundingSphere(reader); HasPosition = reader.ReadUInt32(); HasNormals = reader.ReadUInt32(); if (HasPosition > 1 || HasNormals > 1) { throw new Exception("Well there you go"); } if ((Flags & GeometryFlag.VertexTranslation) != 0) { Vertices = new Vector3[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Vertices[i] = new Vector3(reader); } } if ((Flags & GeometryFlag.Normals) != 0) { Normals = new Vector3[VertexCount]; for (var i = 0; i < VertexCount; ++i) { Normals[i] = new Vector3(reader); } } Materials = ReadSection<MaterialList>().Materials; var extensions = ReadSection<Extension>(); MaterialSplits = extensions.FirstOrDefault<MaterialSplitList>().MaterialSplits; Skinning = extensions.FirstOrDefault<Skin>(); }