示例#1
0
 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);
 }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
 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);
 }
示例#5
0
        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++;
                    }
                }
            }
            */
        }
示例#6
0
 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);
 }
示例#7
0
 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 );
     }
 }
示例#8
0
        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);
        }
示例#9
0
        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);
            }
        }