//----------------------------------------------------------------------------------------------------------- bool RawMesh::read(const char* fileName) { if(fileName == nullptr) return false; std::ifstream stream(fileName, std::ios::binary); if(!stream) { std::cout << "error: could not open file" << std::endl; return false; } if(!readHeader(stream)) return false; if(!readVertices(stream)) return false; if(!readFaces(stream)) return false; if(!readMaterials(stream)) return false; if(!readBones(stream)) return false; if(stream.fail()) { std::cout << "error: broken file" << std::endl; return false; } return true; }
//--------------------------------------------------------------------- void XMLSkeletonSerializer::importSkeleton(const String& filename, Skeleton* pSkeleton) { LogManager::getSingleton().logMessage("XMLSkeletonSerializer: reading XML data from " + filename + "..."); mXMLDoc = new TiXmlDocument(filename.c_str()); mXMLDoc->LoadFile(); TiXmlElement* elem; TiXmlElement* rootElem = mXMLDoc->RootElement(); // Optional blend mode const char* blendModeStr = rootElem->Attribute("blendmode"); if (blendModeStr) { if (String(blendModeStr) == "cumulative") pSkeleton->setBlendMode(ANIMBLEND_CUMULATIVE); else pSkeleton->setBlendMode(ANIMBLEND_AVERAGE); } // Bones elem = rootElem->FirstChildElement("bones"); if (elem) { readBones(pSkeleton, elem); elem = rootElem->FirstChildElement("bonehierarchy"); if (elem) { createHierarchy(pSkeleton, elem) ; elem = rootElem->FirstChildElement("bones"); if (elem) { readBones2(pSkeleton, elem); elem = rootElem->FirstChildElement("animations"); if (elem) { readAnimations(pSkeleton, elem); } elem = rootElem->FirstChildElement("animationlinks"); if (elem) { readSkeletonAnimationLinks(pSkeleton, elem); } } } } LogManager::getSingleton().logMessage("XMLSkeletonSerializer: Finished. Running SkeletonSerializer..." ); }
AHalfLifeDecoder::AHalfLifeDecoder(const char *fname) : AMeshDecoder(fname) { init(); openFile(fname); readHeader(); if(numbones) readBones(); if(numbonecontrollers) readBoneControllers(); if(numhitboxes) readHitBoxes(); if(numseq) readSeqs(); if(numseqgroups) readSeqGroups(); if(numtextures) readTextures(); if(numskinref*numskinfamilies) readSkins(); if(numbodyparts) readBodyParts(); if(numattachments) readAttachments(); if(soundtable) readSounds(); if(soundgroups) readSoundGroups(); if(numtransitions) readTransitions(); }
//--------------------------------------------------------------------- void XMLSkeletonSerializer::importSkeleton(const String& filename, Skeleton* pSkeleton) { LogManager::getSingleton().logMessage("XMLSkeletonSerializer: reading XML data from " + filename + "..."); mXMLDoc = new TiXmlDocument(filename); mXMLDoc->LoadFile(); TiXmlElement* elem; TiXmlElement* rootElem = mXMLDoc->RootElement(); // Bones elem = rootElem->FirstChildElement("bones"); if (elem) { readBones(pSkeleton, elem); elem = rootElem->FirstChildElement("bonehierarchy"); if (elem) { createHierarchy(pSkeleton, elem) ; elem = rootElem->FirstChildElement("bones"); if (elem) { readBones2(pSkeleton, elem); elem = rootElem->FirstChildElement("animations"); if (elem) { readAnimations(pSkeleton, elem); } elem = rootElem->FirstChildElement("animationlinks"); if (elem) { readSkeletonAnimationLinks(pSkeleton, elem); } } } } LogManager::getSingleton().logMessage("XMLSkeletonSerializer: Finished. Running SkeletonSerializer..." ); }
void Model::readFromStream(ArchiveReadStream *stream) { uint32 id = stream->readUint32LE(); if (id != 4) { error("Wrong magic 1 while reading actor '%d'", id); } uint32 format = stream->readUint32LE(); if (format == 256) { _u1 = stream->readUint32LE(); } else if (format == 16) { _u1 = 0; } else { error("Wrong format while reading actor '%d'", format); } uint32 id2 = stream->readUint32LE(); if (id2 != 0xDEADBABE) { error("Wrong magic 2 while reading actor '%d'", id2); } _u2 = stream->readFloat(); uint32 numMaterials = stream->readUint32LE(); for (uint i = 0; i < numMaterials; ++i) { MaterialNode *node = new MaterialNode(); node->_name = stream->readString(); node->_unknown1 = stream->readUint32LE(); node->_texName = stream->readString(); node->_r = stream->readFloat(); node->_g = stream->readFloat(); node->_b = stream->readFloat(); _materials.push_back(node); } uint32 numUnknowns = stream->readUint32LE(); if (numUnknowns != 0) { error("Found a mesh with numUnknowns != 0"); } readBones(stream); uint32 numMeshes = stream->readUint32LE(); for (uint32 i = 0; i < numMeshes; ++i) { MeshNode *node = new MeshNode(); node->_name = stream->readString(); uint32 len = stream->readUint32LE(); for (uint32 j = 0; j < len; ++j) { FaceNode *face = new FaceNode(); face->_matIdx = stream->readUint32LE(); uint32 childCount = stream->readUint32LE(); for (uint32 k = 0; k < childCount; ++k) { VertNode *vert = new VertNode(); vert->_pos1 = stream->readVector3(); vert->_pos2 = stream->readVector3(); vert->_normal = stream->readVector3(); vert->_texS = stream->readFloat(); vert->_texT = stream->readFloat(); vert->_bone1 = stream->readUint32LE(); vert->_bone2 = stream->readUint32LE(); vert->_boneWeight = stream->readFloat(); face->_verts.push_back(vert); } childCount = stream->readUint32LE(); for (uint32 k = 0; k < childCount; ++k) { TriNode *tri = new TriNode(); tri->_vert1 = stream->readUint32LE(); tri->_vert2 = stream->readUint32LE(); tri->_vert3 = stream->readUint32LE(); face->_tris.push_back(tri); } node->_faces.push_back(face); } _meshes.push_back(node); } buildBonesBoundingBoxes(); }