0

我是 Open GL 的初学者,但我已经可以绘制简单的三角形、矩形等。

我的问题是:

我有该结构的结构和静态数组

typedef struct {
    GLKVector3 Position;
} Vertex;

const Vertex Vertices[] = {
    {{0.0, 0.0, 0.0}},
    {{0.5, 0.0, 0.0}},
    {{0.5, 0.5, 0.0}},
    {{0.0, 0.5, 0.0}},
    {{0.0, 0.0, 0.0}}
};

...some code

但我需要动态创建顶点数组... :(

例子:

typedef struct {
    GLKVector3 Position;
} Vertex;

  instance variable - iVertices of type Vertex

- (void) viewDidLoad {
   int numOfVertices = 0;
   Vertex vertices[] = {{0.0, 0.0, 0.0}};
   [self addVertex:vertices atIndex:numOfVertices];
   numOfVertices ++;
   Vertex vertices[] = {{0.5, 0.0, 0.0}};
   [self addVertex:vertices atIndex:numOfVertices];
   numOfVertices ++;
   Vertex vertices[] = {{0.5, 0.5, 0.0}};
   [self addVertex:vertices atIndex:numOfVertices];
}

- (void) addVertex:(Vertex) vertex atIndex:(int) num {
   iVertices[num] = vertex;
}

...and somewhere
glBufferData(GL_ARRAY_BUFFER,
             sizeof(iVertices),
             iVertices,
             GL_STATIC_DRAW);

这在 Objective-C 中是不允许的,或者我不知道该怎么做:(

malloc 或 callow 对我没有帮助......

非常感谢!

4

1 回答 1

0

您的主要问题是您不能只获取作为实例变量的数组的 sizeof,因为它是一个返回大小为 8 的指针。相反,您必须将数组的计数保存在其他地方另一个实例变量(或使用 numOfVertices)并将其乘以sizeof(int). 所以类似的东西glBufferData(GL_ARRAY_BUFFER, numOfVariable*sizeof(int), iVertices, GL_STATIC_DRAW);应该适用于你的情况。

于 2013-09-30T13:17:09.507 回答