У меня есть приложение на основе OpenGL ES со следующей структурой:
- Я анализирую вершины из файла DAE, который содержит несколько объектов (используя NSXMLParser).
- Как яанализируя каждый набор вершин, я создаю объект (sceneObject) и устанавливаю массив вершин в этом объекте, чтобы он соответствовал проанализированным вершинам.Затем я планирую добавить эти sceneObjects в массив объектов, которые будут отображаться OpenGL ES.
Изначально я использовал подход NSArrays для хранения данных вершин, однако я понимаю, что команды OpenGL(например, glvertexpointer) не принимают значения NSObject, вместо этого bue нужны необработанные значения (glfloats, gluints и т. д.).
Вместо того, чтобы преобразовывать NSObjects обратно в необработанные значения GL в классе объектов, я сейчас пытаюсь принятьструктурный подход.Это код, в котором я анализирую информацию о вершинах:
if (floatArray) {
if (currentlyParsing == kVerticeInformation) {
if (currentParserTagType == kGeometry) {
//NSLog(@"Loaded Vertices %@", string);
NSArray * nums = [string componentsSeparatedByString:@" "];
culmunativeCount += [nums count];
//NSLog(@"Culm Count is %d", culmunativeCount);
[fullParseString appendString : string];
if (checkSumCount <= culmunativeCount) {
//NSLog(@"Full Parse String is %@", fullParseString);
NSArray * finishedArray = [fullParseString componentsSeparatedByString:@" "];
//NSLog(@"Finihsed ARray is %d", [finishedArray count]);
[finishedParsingArray addObjectsFromArray:finishedArray];
//NSLog(@" FINISHED PARSING = %d", [finishedParsingArray count]);
NSUInteger baseIndex;
for (baseIndex=0; baseIndex <[finishedParsingArray count]; baseIndex +=3) {
NSString * xPoint = [finishedParsingArray objectAtIndex:baseIndex];
NSDecimalNumber * errorCheckX = [NSDecimalNumber decimalNumberWithString:xPoint];
float x = [errorCheckX floatValue];
NSString * yPoint = [finishedParsingArray objectAtIndex:baseIndex +1];
NSDecimalNumber * errorCheckY = [NSDecimalNumber decimalNumberWithString:yPoint];
float y = [errorCheckY floatValue];
NSString * zPoint = [finishedParsingArray objectAtIndex:baseIndex+2];
NSDecimalNumber * errorCheckZ = [NSDecimalNumber decimalNumberWithString:zPoint];
float z = [errorCheckZ floatValue];
Vertex3D vertexItem = {x,y,z}
//NSLog(@"Vertices stored are %f, %f, %f", x,y,z);
}
currentlyParsing = kNilSetting;
checkSumCount = 0;
[finishedParsingArray removeAllObjects];
//[finishedArray release];
culmunativeCount = 0;
[fullParseString setString:@""];
}
}
}
}
Как вы можете видеть, я теперь каждый раз создаю C-структуру Vertex3D с проанализированной информацией о вершинах.
Мои вопросы:
- Как мне затем создать массив этих отдельных структур C Vertex3D?
- Как я могу затем передать этот массив структур в мой sceneObject?