フォーマットした .obj ファイルを読み込もうとしています:
vertexX vertexY vertexZ normalX normalY normalZ
と:
index1 index2 index3
ベクトルとベクトル配列にフォーマットし、Opengl-ES で直接レンダリングします。私の問題は、モデルを配列にロードしようとすると、それらをロードするのに約 40 秒かかることです。なぜそんなに遅くなるのかわかりません。他のコードが同じモデルをほんの数回ロードするのを見たことがあります。秒。助言がありますか?ファイルをロードするための私のコードは次のとおりです。
-(void)loadModel:(NSString*)filePath
{
try {
ifstream objFile([filePath UTF8String]);
objFile >> numVertices;
objFile.ignore(128, '\n');
vertices.resize(numVertices*6);
VertexNormal* vertex = (VertexNormal*) &vertices[0];
svec3* faceDef;
while (objFile) {
char c = objFile.get();
switch (c) {
case 'v':
{
objFile >> vertex->vertices.x >> vertex->vertices.y >> vertex->vertices.z
>> vertex->normals.x >> vertex->normals.y >> vertex->normals.z;
vertex++;
break;
}
case 'f':
{
objFile >> faceDef->x >> faceDef->y >> faceDef->z;
faceDef++;
break;
}
case '#':
{
part newPart;
partList.push_back(newPart);
numObjects++;
objFile.ignore(128, '\n');
int numFaces;
objFile >> numFaces;
partList[partList.size()-1].faces.resize(numFaces*3);
partList[partList.size()-1].numFaces = numFaces;
faceDef = (svec3*) &partList[partList.size()-1].faces[0];
break;
}
default:
break;
}
objFile.ignore(128, '\n');
}
objFile.close();
free(objFile);
} catch (NSException *ex) {
NSLog(@"%@", [ex reason]);
}
}
私が考えた 1 つの行は、配列をバイナリ ファイルにシリアル化してから、プログラムに直接逆シリアル化することでした。それを行う方法はまだわかりませんが、おそらくこれらの線に沿った何かが解決策になるかもしれません.