OpenGL ES - обновление массива вершин, добавление / удаление вершин - PullRequest
1 голос
/ 20 апреля 2011

Я хочу реализовать функциональность, чтобы я мог добавлять / удалять вершины в / из массива вершин во время выполнения. Есть ли общий способ сделать это?

Рекомендуемый формат для данных вершин - это C-массивы структур, поэтому я попробовал следующее. Сохранить указатель на массив структур Vertex как свойство:

@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, так что, вероятно, это действительно тривиально ..

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Вот как я это сделал:

//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];
}
0 голосов
/ 21 апреля 2011

вот как я это делаю сейчас:

// 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, но использование простых массивов C с malloc / realloc должно быть (намного?) Быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...