protected virtual void ReadGeometryPositions( short bindIdx, BinaryReader reader, VertexData data ) { data.vertexDeclaration.AddElement( bindIdx, 0, VertexElementType.Float3, VertexElementSemantic.Position ); // Reading to nothing! float[] barray = new float[data.vertexCount * 3]; ReadFloats(reader, data.vertexCount * 3, barray); }
protected virtual void ReadGeometryTexCoords( short bindIdx, BinaryReader reader, VertexData data, int coordSet ) { short dim = ReadShort( reader ); data.vertexDeclaration.AddElement( bindIdx, 0, VertexElement.MultiplyTypeCount( VertexElementType.Float1, dim ), VertexElementSemantic.TexCoords, coordSet ); // reading to nothing! float[] barray = new float[data.vertexCount * dim]; ReadFloats(reader, data.vertexCount * dim, barray); }
protected override void ReadGeometry( BinaryReader reader, VertexData data ) { ushort texCoordSet = 0; short bindIdx = 0; data.vertexStart = 0; data.vertexCount = ReadInt(reader); ReadGeometryPositions( bindIdx++, reader, data ); if ( !IsEOF( reader ) ) { MeshChunkID cid = ReadChunk( reader ); while ( !IsEOF( reader ) && ( cid == MeshChunkID.GeometryNormals || cid == MeshChunkID.GeometryColors || cid == MeshChunkID.GeometryTexCoords ) ) { switch ( cid ) { case MeshChunkID.GeometryNormals: ReadGeometryNormals( bindIdx++, reader, data ); break; case MeshChunkID.GeometryColors: ReadGeometryColors( bindIdx++, reader, data ); break; case MeshChunkID.GeometryTexCoords: ReadGeometryTexCoords( bindIdx++, reader, data, texCoordSet++ ); break; } if ( !IsEOF( reader ) ) cid = ReadChunk( reader ); } if(!IsEOF(reader)) Seek(reader,-ChunkOverheadSize); } }
protected virtual void ReadGeometryColors( short bindIdx, BinaryReader reader, VertexData data ) { data.vertexDeclaration.AddElement( bindIdx, 0, VertexElementType.Color, VertexElementSemantic.Diffuse ); // reading to nothing! int[] barray = new int[data.vertexCount]; ReadInts(reader, data.vertexCount, barray); }
protected override void ReadGeometryTexCoords( short bindIdx, BinaryReader reader, VertexData data, int coordSet ) { short dim = ReadShort(reader); data.vertexDeclaration.AddElement( bindIdx, 0, VertexElement.MultiplyTypeCount( VertexElementType.Float1, dim), VertexElementSemantic.TexCoords,coordSet); // reading to nothing! float[] barray = new float[data.vertexCount * dim]; ReadFloats(reader, data.vertexCount * dim, barray); /* if ( dim == 2 ) { int count = 0; unsafe { float* pTex = (float*)texCoords.ToPointer(); for ( int i = 0; i < data.vertexCount; i++ ) { count++; // skip u pTex[ count ] = 1.0f - pTex[ count ]; // v = 1 - v count++; } } } */ }
protected virtual void ReadGeometryVertexElement(BinaryReader reader, VertexData data) { short source = ReadShort(reader); VertexElementType type = (VertexElementType)ReadShort(reader); VertexElementSemantic semantic = (VertexElementSemantic)ReadShort(reader); short offset = ReadShort(reader); short index = ReadShort(reader); data.vertexDeclaration.AddElement(source, offset, type, semantic, index); }
protected virtual void ReadGeometryVertexDeclaration( BinaryReader reader, VertexData data ) { if ( !IsEOF( reader ) ) { MeshChunkID cid = ReadChunk( reader ); while ( !IsEOF( reader ) && ( cid == MeshChunkID.GeometryVertexElement ) ) { switch ( cid ) { case MeshChunkID.GeometryVertexElement: ReadGeometryVertexElement( reader, data ); break; } if ( !IsEOF( reader ) ) cid = ReadChunk( reader ); } if ( !IsEOF( reader ) ) Seek( reader, -ChunkOverheadSize ); } }
protected virtual void ReadGeometryVertexBuffer( BinaryReader reader, VertexData data ) { short bindIdx = ReadShort( reader ); short vertexSize = ReadShort( reader ); MeshChunkID cid = ReadChunk( reader ); if ( cid != MeshChunkID.GeometryVertexBufferData ) throw new Exception("Missing vertex buffer data"); if(data.vertexDeclaration.GetVertexSize( bindIdx ) != vertexSize) throw new Exception("Vertex decl size and vertex buffer size mismatch"); data.vertexBuffer = new byte[data.vertexCount * vertexSize]; ReadBytes(reader, data.vertexCount * vertexSize, data.vertexBuffer); }
protected virtual void ReadGeometry( BinaryReader reader, VertexData data) { data.vertexStart = 0; data.vertexCount = ReadInt(reader); if (!IsEOF(reader)) { MeshChunkID cid = ReadChunk(reader); while ( !IsEOF( reader ) && ( cid == MeshChunkID.GeometryVertexDeclaration || cid == MeshChunkID.GeometryVertexBuffer ) ) { switch ( cid ) { case MeshChunkID.GeometryVertexDeclaration: ReadGeometryVertexDeclaration( reader, data ); break; case MeshChunkID.GeometryVertexBuffer: ReadGeometryVertexBuffer( reader, data ); break; } if ( !IsEOF( reader ) ) cid = ReadChunk( reader ); } if(!IsEOF(reader)) Seek(reader,-ChunkOverheadSize); } }