Cocoa-OpenGL ES-将我的头绕在C阵列上
这更像是一个一般的理论问题,我似乎无法理解,所以我会解释我想做什么 我正在用Cocoa和OpenGL ES编写一个3D游戏引擎。我正在尝试为我的3d模型确定存储顶点数据的最佳方式(每个顶点都有一个x、y和z位置) 以前,我将每个顶点存储为一个单独的自定义对象(Cocoa-OpenGL ES-将我的头绕在C阵列上,cocoa,pointers,opengl-es,arrays,Cocoa,Pointers,Opengl Es,Arrays,这更像是一个一般的理论问题,我似乎无法理解,所以我会解释我想做什么 我正在用Cocoa和OpenGL ES编写一个3D游戏引擎。我正在尝试为我的3d模型确定存储顶点数据的最佳方式(每个顶点都有一个x、y和z位置) 以前,我将每个顶点存储为一个单独的自定义对象(AEVertex),这个对象有一个x、y和z实例变量。问题是我正在使用命令glDrawArrays(),它将C数组的地址作为第一个参数。这个C-数组应该是一个一维数组,依次存储所有顶点位置(顶点1的x位置、顶点1的y位置、顶点1的z位置、顶
AEVertex
),这个对象有一个x、y和z实例变量。问题是我正在使用命令glDrawArrays()
,它将C数组的地址作为第一个参数。这个C-数组应该是一个一维数组,依次存储所有顶点位置(顶点1的x位置、顶点1的y位置、顶点1的z位置、顶点2的x位置、顶点2的y位置、顶点2的z位置等)
我面临的问题是,我必须从每个顶点对象收集给定模型的所有顶点数据,并创建一个足够大的C数组来存储所有这些顶点/用顶点数据填充C数组,然后传入该数组。这显然会大大降低速度,因为我基本上会为每个模型分配两次内存
所以我想做的是简单地创建一个类AEMesh,它有一个C-Array实例变量,用于存储给定AEMesh对象的所有vertexdata。我的问题是,据我所知,只能声明固定大小的C-Array实例变量,但是a)我的所有模型都有不同数量的顶点,b)在运行时读取模型数据之前,我不知道每个模型有多少个顶点
所以,我的问题是:
是的,这是可能的,您可以有一个作为指针的实例变量,并在运行时使用类似于
malloc
的函数为其分配内存。有关动态阵列的教程,请参见。以后不要忘记释放内存 不要将整个数组作为AEMesh类的一部分。相反,给AEMesh一个ivar,它是指向顶点数组的指针。这使您可以自由地使用任意大小的数组,并且可以随时用不同的数组替换它