public int Read(ByteBufferReader reader) { BlockHeader header = new BlockHeader(reader); vertexCount = reader.ReadInt(); reader.ReadInt(); //normal count reader.ReadInt(); //offset vertexData = new VertexData[vertexCount]; normalCounts = new int[vertexCount]; normals = new List <Vector3>(); for (int i = 0; i < normalCounts.Length; i++) { normalCounts[i] = reader.ReadByte(); } for (int i = 0; i < vertexCount; i++) { int normalCountForVertex = normalCounts[i]; vertexData[i].vertex = reader.ReadVector3(); vertexData[i].normals = new Vector3[normalCountForVertex]; for (int j = 0; j < normalCountForVertex; j++) { Vector3 normal = reader.ReadVector3(); vertexData[i].normals[j] = normal; normals.Add(normal); } } return(header.size); }
public FlatPolygonBlock(ByteBufferReader reader) { reader.FastForward(sizeof(int)); size = reader.ReadInt(); normal = reader.ReadVector3(); center = reader.ReadVector3(); radius = reader.ReadFloat(); vertexCount = reader.ReadInt(); red = reader.ReadByte(); green = reader.ReadByte(); blue = reader.ReadByte(); pad = reader.ReadByte(); vertexMap = new PolygonVertex[vertexCount]; for (int i = 0; i < vertexCount; i++) { vertexMap[i].vertexIndex = reader.ReadUShort(); vertexMap[i].normalIndex = reader.ReadUShort(); } }
public SortNormalBlock(ByteBufferReader reader) { reader.FastForward(sizeof(int)); size = reader.ReadInt(); planeNormal = reader.ReadVector3(); planePoint = reader.ReadVector3(); reserved = reader.ReadInt(); frontOffset = reader.ReadInt(); backOffset = reader.ReadInt(); preListOffset = reader.ReadInt(); postListOffset = reader.ReadInt(); onlineOffset = reader.ReadInt(); boundingBoxMin = reader.ReadVector3(); boundingBoxMax = reader.ReadVector3(); }
VertexAnimationClipInfo getOrAddAnimationInfo(string aniResName) { aniResName = aniResName.ToLower(); VertexAnimationClipInfo clipInfo = null; AnimationClipInfos.TryGetValue(aniResName, out clipInfo); if (clipInfo != null) { return(clipInfo); } var asset = Resources.Load <TextAsset>(aniResName); byte[] clipData = null; if (asset != null) { clipData = Resources.Load <TextAsset>(aniResName).bytes; } if (clipData == null) { Debug.LogError("animation clip data is null:" + aniResName); return(null); } clipInfo = new VertexAnimationClipInfo(); ByteBufferReader bbuffer = new ByteBufferReader(clipData); int Count = bbuffer.ReadInt(); for (int i = 0; i < Count; i++) { ClipMeshData meshData = GetMeshData(bbuffer); clipInfo.clipTotalTimeLen += meshData.timeLenth; clipInfo.clipLenghts.Add(meshData.timeLenth); clipInfo.everyClipFrameTimePoints.Add(new Vector2(meshData.Frame2TimePoint, meshData.Frame3TimePoint)); //,meshData.Frame4TimePoint clipInfo.clipMeshs.Add(meshData.GenMesh()); } bbuffer.Close(); clipData = null; AnimationClipInfos.Add(aniResName, clipInfo); return(clipInfo); }
ClipMeshData GetMeshData(ByteBufferReader bbuffer) { ClipMeshData meshData = new ClipMeshData(); meshData.timeLenth = bbuffer.ReadFloat(); meshData.Frame2TimePoint = bbuffer.ReadFloat(); meshData.Frame3TimePoint = bbuffer.ReadFloat(); // meshData.Frame4TimePoint = bbuffer.ReadFloat(); meshData.subMeshCount = bbuffer.ReadInt(); meshData.subMeshTriangleLens = new int[meshData.subMeshCount]; for (int m = 0; m < meshData.subMeshCount; m++) { meshData.subMeshTriangleLens[m] = bbuffer.ReadInt(); } int triangleBufferCount = bbuffer.ReadInt(); meshData.triangleBuffer = new int[triangleBufferCount]; for (int m = 0; m < triangleBufferCount; m++) { meshData.triangleBuffer[m] = bbuffer.ReadInt(); } int vertexBufferCount = bbuffer.ReadInt(); meshData.vertexBuffer = new float[vertexBufferCount]; for (int m = 0; m < vertexBufferCount; m++) { meshData.vertexBuffer[m] = bbuffer.ReadFloat(); } int normalBufferCount = bbuffer.ReadInt(); meshData.normalBuffer = new float[normalBufferCount]; for (int m = 0; m < normalBufferCount; m++) { meshData.normalBuffer[m] = bbuffer.ReadFloat(); } int tangentBufferCount = bbuffer.ReadInt(); meshData.tangentBuffer = new float[tangentBufferCount]; for (int m = 0; m < tangentBufferCount; m++) { meshData.tangentBuffer[m] = bbuffer.ReadFloat(); } int uvBufferCount = bbuffer.ReadInt(); meshData.uvBuffer = new float[uvBufferCount]; for (int m = 0; m < uvBufferCount; m++) { meshData.uvBuffer[m] = bbuffer.ReadFloat(); } int uv2BufferCount = bbuffer.ReadInt(); meshData.uv2Buffer = new float[uv2BufferCount]; for (int m = 0; m < uv2BufferCount; m++) { meshData.uv2Buffer[m] = bbuffer.ReadFloat(); } //int colorBufferCount = bbuffer.ReadInt(); //meshData.colorBuffer = new float[colorBufferCount]; //for (int m = 0; m < colorBufferCount; m++) //{ // meshData.colorBuffer[m] = bbuffer.ReadFloat(); //} return(meshData); }
public BlockHeader(ByteBufferReader reader) { id = reader.ReadInt(); size = reader.ReadInt(); }
private POFModel ParseFile(string filePath) { byte[] bytes = File.ReadAllBytes(filePath); reader = new ByteBufferReader(bytes); string signature = reader.ReadString(4); int version = reader.ReadInt(); if (signature != "PSPO") { Debug.LogError("Invalid POF file signature: " + signature); return(null); } if (version < 2117) { Debug.LogError("Invalid POF file version: " + version); return(null); } while (!reader.ReachedEOF) { string blockType = reader.ReadString(4); int blockSize = reader.ReadInt(); int startPtr = reader.GetPtr(); switch (blockType) { case "TXTR": ParseTextureSection(); break; case "HDR2": ParseHeaderSection(); break; case "OBJ2": ParseSubObjectSection(); break; case "SPCL": ParseSpecialPointSection(); break; case "GPNT": ParseGunPointSection(); break; case "MPNT": ParseMissilePointSection(); break; case "TGUN": ParseTurretGunSection(); break; case "TMIS": ParseTurretMissileSection(); break; case "DOCK": ParseDockPointSection(); break; case "FUEL": ParseFuelSection(); break; case "SHLD": ParseShieldSection(); break; case "EYE ": ParseEyeSection(); break; case "ACEN": ParseAutoCenterSection(); break; case "INSG": ParseInsigniaSection(); break; case "PATH": ParsePathSection(); break; case "GLOW": ParseGlowSection(); break; case "SLDC": ParseShieldCollisionBSPSection(); break; case "PINF": ParsePOFInfoSection(blockSize); break; default: Debug.LogError("UNKNOWN BLOCK TYPE " + blockType); return(null); } AssertSectionFullyRead(blockType, startPtr, blockSize); } return(model); }
private void ParseTextureSection() { int textureCount = reader.ReadInt(); model.textureList = new string[textureCount]; for (int i = 0; i < textureCount; i++) { model.textureList[i] = reader.ReadString(); } }