Ios 使用Objective C和GLKit存储模型信息的数据结构
我正在用iOS开发我的小型3D引擎。我需要一个什么样的数据结构对性能更好的建议。我想继续使用C和Objto-C。最好没有C++。 我的想法是使用GLKVector3和GLKVector4存储顶点信息。 现在,这只用于存储一个顶点。但是,几何体包含多个顶点 我想做的是在Objective-C中创建一个Geometry类,它可以为每个顶点位置存储多个GLKVector3,为每个顶点颜色存储多个GLKVector4。此类还将提供以下类型的函数:Ios 使用Objective C和GLKit存储模型信息的数据结构,ios,objective-c,c,data-structures,opengl-es,Ios,Objective C,C,Data Structures,Opengl Es,我正在用iOS开发我的小型3D引擎。我需要一个什么样的数据结构对性能更好的建议。我想继续使用C和Objto-C。最好没有C++。 我的想法是使用GLKVector3和GLKVector4存储顶点信息。 现在,这只用于存储一个顶点。但是,几何体包含多个顶点 我想做的是在Objective-C中创建一个Geometry类,它可以为每个顶点位置存储多个GLKVector3,为每个顶点颜色存储多个GLKVector4。此类还将提供以下类型的函数: (GLvoid*)GetRawDataForVerte
- (GLvoid*)GetRawDataForVertex李>
- (GLvoid*)GetRawDataForIndex李>
John如果你要在OpenGL中工作,你需要习惯使用动态分配的内存缓冲区和C数组。时期这就是您必须传递给OpenGL的内容,通过这种方式,您将获得更紧凑的存储和更高效的处理。不要使用nsarray。每次你想对数据做点什么的时候,你都会在不同的格式之间来回转换数据 您需要这样的指针:
GLKVector4 *colors;
GLKVector3 *positions;
int pixels = height*width;
colors = malloc(pixels*sizeof(GLKVector4));
positions = malloc(pixels*sizeof(GLKVector3));
然后编码如下:
GLKVector4 *colors;
GLKVector3 *positions;
int pixels = height*width;
colors = malloc(pixels*sizeof(GLKVector4));
positions = malloc(pixels*sizeof(GLKVector3));
如果您想将指针变成属性,您也可以这样做,但请注意,每次使用self.colors[x]时,您都会添加一个额外的方法调用,如果您在>100万像素的范围内循环,就像在retina iPad上一样,它开始对性能产生影响
注意:当您使用malloc时,请注意,您有责任在使用完毕后释放内存。ARC不会为您管理这种类型的内存,并且块往往很大。如果创建大的缓冲区,并且在创建新缓冲区之前不释放它们,您将很快耗尽内存并崩溃。我希望有一种比malloc更简单、更安全的方法。但如果这是更好的解决方案,我会使用它。