Cocoa-OpenGL ES-将我的头绕在C阵列上

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位置、顶

这更像是一个一般的理论问题,我似乎无法理解,所以我会解释我想做什么

我正在用Cocoa和OpenGL ES编写一个3D游戏引擎。我正在尝试为我的3d模型确定存储顶点数据的最佳方式(每个顶点都有一个x、y和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)在运行时读取模型数据之前,我不知道每个模型有多少个顶点

所以,我的问题是:

  • 有没有办法创建一个可变的动态C数组作为对象的实例变量?因此,允许我为从给定AEMesh的模型文件中读取的每个顶点添加新的数组索引

  • 如果没有,我想知道我是否可以在AEMesh的初始化之外创建vertexdata C-Array,并在AEMesh实例化时简单地让一个指针实例变量指向nil,然后在声明C-Array后重新指向创建的C-Array


  • 是的,这是可能的,您可以有一个作为指针的实例变量,并在运行时使用类似于
    malloc
    的函数为其分配内存。有关动态阵列的教程,请参见。以后不要忘记
    释放
    内存

    不要将整个数组作为AEMesh类的一部分。相反,给AEMesh一个ivar,它是指向顶点数组的指针。这使您可以自由地使用任意大小的数组,并且可以随时用不同的数组替换它