2011-08-19 35 views
1

這是一個更一般的理論問題,我只是不能似乎繞到我的頭的腦袋,因此不適解釋什麼我試着去做。可可 - 的OpenGL ES - 包裝紙我周圍的C-陣列

我寫一個3D遊戲引擎與可可和OpenGL ES。我試圖確定存儲我的3D模型的頂點數據的最佳方式(每個頂點都有一個x,y和z位置)。

以前,我被存儲各頂點作爲一個單獨的自定義對象(AEVertex),該對象具有一個x,y,和z的實例變量。問題是我正在使用命令glDrawArrays(),它將C-Array的地址作爲第一個參數。此C-陣列被認爲是一維陣列中存儲的所有VERT位置在演替(垂直1的x位置,VERT 1的y位置,VERT 1的z位置,VERT 2的x位置,VERT 2的y位置,VERT 2的Z位置等等)。

我面臨的問題是,我必須從每個單獨的頂點對象收集給定模型的所有頂點數據,並創建一個足夠大的C數組來存儲所有這些頂點/用頂點填充C數組數據,然後傳入這個數組。這顯然會使事情減慢很多,因爲我基本上爲每個模型分配兩次內存。

所以我想要做的只是有一個類AEMesh,它有一個C-Array實例變量,存儲給定的AEMesh對象的所有vertexdata。我對這個問題的是,據但是我知道它只能申報一個固定大小的C-Array實例變量,一個)我所有的車型都會有頂點的不同數量和b)我不知道有多少綠黨每個模型直到在運行時讀取模型數據。

所以,我的問題:

  1. 是否有某種方式來創建一個可變的,動態的C-陣列爲對象的實例變量?因此,允許我爲從給定的AEMesh模型文件讀入的每個頂點添加新的數組索引?

  2. 如果不是,我想知道是否可以在AEMesh的初始化之外創建vertexdata C-Array,並且在實例化AEMesh時指向nil的指針實例變量,並且在創建後的C-Array之後重新命名C數組被聲明。

回答

0

是的,它是可能的,你可以有一個實例變量,它是一個指針,並使用功能,如malloc在運行時爲它分配內存。有關動態數組的教程,請參閱this page。不要忘記free你的記憶!

0

不要讓你的AEMesh類的整個陣列的一部分。相反,給AEMesh一個指向頂點數組的指針。這使您可以自由地使用任意大小的數組,並且可以隨意更換不同的數組。