2013-05-13 57 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