내가 포맷 한 .obj 파일을로드하려고합니다.버텍스와면 인덱스 배열을 OpenGL-ES에로드하는 가장 빠른 방법은 무엇입니까?
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]);
}
}
한 줄의 생각은 배열을 이진 파일로 직렬화 한 다음 바로 내 프로그램에 직렬화합니다. 아직 어떻게해야할지 알지 못했지만, 아마 그 라인을 따라 뭔가가 해결책이 될 수도 있습니다.
좋은 제안. 필자는 PC에 직접 바이너리 형식을 작성했습니다. 아직 iPad에서 테스트하지는 않았지만 PC로드 시간은 33 초에서 1 초로 늘어 났으며 파일 크기는 17MB에서 7MB로 압축되지 않았으며 3MB에서 1.8MB로 압축되었습니다. 훨씬 낫다. 감사. – Davido
@Davido 당신이 나 자신의 바이너리 형식을 쓰는 방법을 가르쳐 주시겠습니까? "33 초에서 1 초"와우. –