bool OBJParser::Parse(const wchar_t* filePath, Model** result) { bool isSucceed = false; { Assert(NULL != filePath); Assert(NULL != result); Assert(*result == NULL); YString::Copy(mFilePath, _countof(mFilePath), filePath); PerformanceTimer::Begin(L"parsing OBJ file"); clear(); YFile* file = YFile::Open(filePath, YFile::READ); Assert(NULL != file); wchar_t lineContent[MAX_STR_LEN]; while(file->ReadLine(lineContent, MAX_STR_LEN) != NULL) { if(parseLine(file, lineContent)) break; } file->Close(); PerformanceTimer::End(); PerformanceTimer::Begin(L"building result model geometry"); // 为获取得到的geo数据计算tbn并创建vb,ib for(size_t i = 0; i < mGeoList.size(); ++i) { Geometry* geo = mGeoList[i]; if(((mDataContentType & UV_DATA) == 0)) { geo->CalculateNormals(); geo->BuildGeometry(XYZ_N); } else { geo->CalculateTBN(); geo->BuildGeometry(XYZ_UV_TBN); } geo->SaveToFile(L"Assets/Geometries"); gEngine->GetGeometryManager()->AddGeometry(geo); } PerformanceTimer::End(); *result = mResultModel; clear(); } isSucceed = true; Exit: return isSucceed; }