2013-05-13 79 views
0

我正在写一个iOS加载程序,用于加载来自plist的数据,以便通过OpenGL将顶点数据等发送到GPU。我可以很容易地提取标准类型的对象,如字符串,整数等。从plist中提取未知数据

当我遇到看起来像是一个字典对象的原始数据时,我被困住了。 plist是我的3D建模软件保存的原生文件,我不是作者,所以我不知道数据是如何写入这个对象的。

我对这个对象有些了解,它可能是浮点数组,每个顶点需要X,Y和Z的浮点值,下面的例子中有26个顶点。

下面是plist文件的实际数据对象:

<key>vertex</key> 
    <data> 
    AAAAAL8AAAAAAAAAAAAAAAAAAAC/AAAAPwAAAAAAAAA+gAAAvwAA 
    AD7ds9cAAAAAPt2z2L8AAAA+f///AAAAAD8AAAC/AAAAsru9LgAA 
    AAA+3bPXvwAAAL6AAAEAAAAAPoAAAb8AAAC+3bPXAAAAALM7vS6/ 
    AAAAvwAAAAAAAAC+gAADvwAAAL7ds9UAAAAAvt2z2L8AAAC+f//9 
    AAAAAL8AAAC/AAAAMczeLgAAAAC+3bPYvwAAAD5///0AAAAAvn// 
    +L8AAAA+3bPaAAAAAD6AAAA/AAAAPt2z1wAAAAAAAAAAPwAAAD8A 
    AAAAAAAAAAAAAD8AAAAAAAAAAAAAAD7ds9g/AAAAPn///wAAAAA/ 
    AAAAPwAAALK7vS4AAAAAPt2z1z8AAAC+gAABAAAAAD6AAAE/AAAA 
    vt2z1wAAAACzO70uPwAAAL8AAAAAAAAAvoAAAz8AAAC+3bPVAAAA 
    AL7ds9g/AAAAvn///QAAAAC/AAAAPwAAADHM3i4AAAAAvt2z2D8A 
    AAA+f//9AAAAAL5///g/AAAAPt2z2gAAAAA= 
    </data> 

关于如何阅读这个任何想法?这里是我的地方:

// get plist 
NSString *path = [[NSBundle mainBundle] pathForResource:@"Cylinder" ofType:@"jas"]; 
NSDictionary *cheetahFile = [NSDictionary dictionaryWithContentsOfFile:path]; 
NSArray *objectArray = [cheetahFile objectForKey:@"Objects"]; 
NSDictionary *model = [objectArray objectAtIndex:1]; 

//get vertex count 
GLshort vertCount = [[model valueForKey:@"vertexcount"] intValue]; 

//All good so far...but... 

//get vertex data?... this doesn't work: 
NSMutableArray *vertArray = [NSMutableArray arrayWithObject:[model objectForKey:@"vertex"]]; 

P.S.如果我正在犯新秀错误,请提前抱歉。我是专业设计师,而不是程序员。所以,当我吃蜡笔的时候,用柔和的色调说慢话。 :)

回答

0

<data>部分是编码的NSData对象。你可以这样做:

NSData *vertexData = model[@"vertex"]; 

你对这些数据做了什么是一个完整的讨论。

+0

谢谢,这是更接近。是的,如何处理它......这是真正的问题。 – 2013-05-13 23:04:03

+0

'NSData'只是一个字节流。它可能是任何东西。您需要了解字节是如何创建的以及它们代表的是什么。 – rmaddy 2013-05-13 23:06:56

+0

它确实需要是一个浮点数组,在这种情况下其他的东西是没有意义的。 – 2013-05-13 23:10:31