Я пытаюсь загрузить .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]);
}
}
Одна линия мысли у меня было сериализовать массивы в двоичный файл, а затем просто десериализации их прямо в мою программу. Пока не выяснили, как это сделать, но, возможно, что-то по этим направлениям может быть решением.
Я никогда не делал этого раньше, у вас есть пример кода, как вы это сделаете? Похоже, это может быть то, что я ищу. – Davido 2010-12-01 22:38:54
Извините, я забыл прояснить. Это может изменить то, что вы предлагаете, но я хотел бы, чтобы пользователь мог открыть NEW .obj-файлы со своего устройства и просмотреть их в моем средстве просмотра OpenGL. Таким образом, статические файлы не идут, если нет способа получить код для массивов в текстовом файле и объектно-скомпилировать эти массивы непосредственно во время выполнения. – Davido 2010-12-01 22:54:39