私は、次のような構造を持つのOpenGL ESベースのアプリを持っている:私は(NSXMLParserを使用して)オブジェクトの数が含まれているDAEファイルから頂点を解析共有構造体の情報のOpenGL ES
- を。
- 各頂点のセットを解析するときに、オブジェクト(sceneObject)を作成し、このオブジェクトの頂点配列を解析された頂点と一致するように設定します。次に、これらのsceneObjectを、OpenGL ESによってレンダリングされるオブジェクトの配列に追加することを計画しています。
当初、私はBUEではなく生の値(glfloatsとgluintsなど)を必要とする、しかし、私は(例えばglvertexpointerなど)のOpenGLのコマンドはNSObjectの値を受け入れないことを理解し、頂点データを格納するNSArraysを使用してのアプローチを取っていました。
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:@""];
}
}
}
}
あなたは情報ヴェル解析されたと私は今Vertex3D C構造体を毎回作成しています、見ることができるように。
私の質問は以下のとおりです。
- どのように私は、これらの個々のC Vertex3Dの構造体の配列を作成しますか?
- この構造体の配列を私のsceneObjectに渡すにはどうしたらいいですか?
単純ではなく、非常によくソリューションを使用すると、スペースの必要量を事前に割り当てることができますので、あなたは、事前に配列のサイズを知っています! 構造体をパラメータとしてNSObjectをサブクラス化し、オブジェクトの配列を作成します。そして、受信機クラスの構造体の配列を作成してください – SAKrisT
これが役立つかどうかわかりません - あなたは構造体にnsobjectsを追加できませんか? – GuybrushThreepwood