示例#1
0
        public static byte[] UnpackNormals(byte[] data, VertexAttributeType attributeType, ref int stride)
        {
            switch (attributeType)
            {
            case VertexAttributeType.TangentSpaceUnitVectorsCompressed:
                var packedElementSize = attributeType.GetSize();
                stride = Vector3.SizeInBytes * 3;
                var count        = (data.Length / packedElementSize);
                var bufferLength = count * stride;
                var buffer       = new byte[bufferLength];
                using (var binaryReader = new BinaryReader(new MemoryStream(data)))
                    using (var binaryWriter = new BinaryWriter(new MemoryStream(buffer)))
                    {
                        while (binaryReader.BaseStream.Position < data.Length)
                        {
                            var normal    = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32());
                            var tangent   = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32());
                            var bitangent = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32());
                            binaryWriter.Write(normal);
                            binaryWriter.Write(tangent);
                            binaryWriter.Write(bitangent);
                        }
                    }
                return(buffer);

            default:
                return(data);
            }
        }
示例#2
0
        private static VertexBuffer UnpackLightingData(ref VertexBuffer vertexBuffer)
        {
            var packedElementSize = vertexBuffer.Type.GetSize( );
            var stride            = Vector3.SizeInBytes * 3;
            var count             = vertexBuffer.Data.Length / packedElementSize;
            var bufferLength      = count * stride;
            var buffer            = new byte[bufferLength];

            using (var binaryReader = new BinaryReader(new MemoryStream(vertexBuffer.Data)))
                using (var binaryWriter = new BinaryWriter(new MemoryStream(buffer)))
                {
                    while (binaryReader.BaseStream.Position < vertexBuffer.Data.Length)
                    {
                        var normal    = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32( ));
                        var tangent   = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32( ));
                        var bitangent = VertexFunctions.UnpackVectorInt(binaryReader.ReadInt32( ));
                        binaryWriter.Write(normal);
                        binaryWriter.Write(tangent);
                        binaryWriter.Write(bitangent);
                    }
                }
            return(new VertexBuffer
            {
                Data = buffer,
                Type = VertexAttributeType.UnpackedLightingData
            });
        }