我想实现功能,以便我可以在运行时向顶点数组添加/删除顶点。 有没有一种常见的方法呢?
顶点数据的推荐格式似乎是结构的C数组, 所以我尝试了以下内容。将指向顶点结构数组的指针保持为属性:
@property Vertex *vertices;
然后创建一个新数组并通过
复制数据- (void) addVertex:(Vertex)newVertex
{
int numberOfVertices = sizeof(vertices) / sizeof(Vertex);
Vertex newArray[numberOfVertices + 1];
for (int i = 0; i < numberOfVertices; i++)
newArray[i] = vertices[i];
newArray[numberOfVertices] = newVertex;
self.vertices = newArray;
}
但没有运气。我对C不太自信,所以这可能真的很微不足道。
答案 0 :(得分:1)
这就是我刚刚做到的:
//verts is an NSMutableArray and I want to have an CGPoint c array to use with
// glVertexPointer(2, GL_FLOAT, 0, vertices);... so:
CGPoint vertices[[verts count]];
for(int i=0; i<[verts count]; i++)
{
vertices[i] = [[verts objectAtIndex:i] CGPointValue];
}
答案 1 :(得分:0)
这是我现在的表现:
// re-allocate the array dynamically.
// realloc() will act like malloc() if vertices == NULL
Vertex newVertex = {{x,y},{r,g,b,a}};
numberOfVertices++;
vertices = (Vertex *) realloc(vertices, sizeof(Vertex) * numberOfVertices);
if(vertices == NULL) NSLog(@"FAIL allocating memory for vertex array");
else vertices[numberOfVertices - 1] = newVertex;
// clean up memory once i don't need the array anymore
if(vertices != NULL) free(vertices);
我认为上面的icnivad方法更灵活,因为你可以用NSMutableArray做更多的事情,但是使用带有malloc / realloc的普通C数组应该(更多?)更快。