//============================================================ public void Unserialize(IInput input) { _name = input.ReadString(); _materialName = input.ReadString(); _effectName = input.ReadString(); // 读取矩阵 _localMatrix.Unserialize(input); _worldMatrix.Unserialize(input); // 读取轮廓 _outlineMin.Unserialize(input); _outlineMax.Unserialize(input); // 读取标识 int flag = input.ReadInt16(); _vertexPosition = input.ReadInt8(); _vertexColor = input.ReadInt8(); _vertexCoord = input.ReadInt8(); _vertexNormal = input.ReadInt8(); _vertexBinormal = input.ReadInt8(); _vertexTangent = input.ReadInt8(); _vertexBoneIndex = input.ReadInt8(); _vertexBoneWeight = input.ReadInt8(); // 读取顶点 int vertexCount = input.ReadInt32(); _vertexSize = input.ReadUint8(); _vertexSize = 20; for (int n = 0; n < vertexCount; n++) { // 输出顶点 if (-1 != _vertexPosition) { _vertexBuffer.WriteFloat(input.ReadFloat()); _vertexBuffer.WriteFloat(input.ReadFloat()); _vertexBuffer.WriteFloat(input.ReadFloat()); _vertexBuffer.WriteFloat(1.0f); } // 输出颜色 if (-1 != _vertexColor) { _vertexBuffer.WriteFloat((float)input.ReadUint8() / 255); _vertexBuffer.WriteFloat((float)input.ReadUint8() / 255); _vertexBuffer.WriteFloat((float)input.ReadUint8() / 255); _vertexBuffer.WriteFloat((float)input.ReadUint8() / 255); } else { _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); } // 输出坐标 if (-1 != _vertexCoord) { _vertexBuffer.WriteFloat(input.ReadFloat()); _vertexBuffer.WriteFloat(input.ReadFloat()); } else { _vertexBuffer.WriteFloat(0.0f); _vertexBuffer.WriteFloat(0.0f); } // 输出法线,副法线,切线 if (-1 != _vertexNormal) { _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(input.ReadUint8()); } else { _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); } if (-1 != _vertexBinormal) { _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); } else { _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); } if (-1 != _vertexTangent) { _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); _vertexBuffer.WriteFloat(((float)input.ReadUint8() / 255 - 0.5f) * 2.0f); } else { _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); _vertexBuffer.WriteFloat(1.0f); } // 使用两条管道,每条管道4个数据,前管道为索引内容,后管道为权重 if (-1 != _vertexBoneIndex) { //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); } if (-1 != _vertexBoneWeight) { //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); //_vertexBuffer.WriteFloat(input.ReadFloat()); } } // 读取面索引 int faceCount = input.ReadInt32(); for (int n = 0; n < faceCount; n++) { _faceBuffer.WriteUint32(input.ReadUint16()); _faceBuffer.WriteUint32(input.ReadUint16()); _faceBuffer.WriteUint32(input.ReadUint16()); } // 读取骨骼列表 int boneCount = input.ReadUint8(); for (int n = 0; n < boneCount; n++) { input.ReadUint8(); } // 读取骨骼列表 _track.Unserialize(input); }