2009-05-05 1 views
2

Я пытаюсь научиться писать приложения OpenGL для iPhone. Как я могу портировать следующий код для работы с OpenGL-ES? Я знаю, что я должен хранить вершины в массиве, а затем вызывать glDrawArrays(), но есть ли оптимальный способ сделать это? Моя мысль состоит в том, чтобы создать очень большой массив и просто сохранить счетчик количества заполненных пробелов. Это лучший подход? Как насчет использования NSArray, а затем преобразования в массив c?OpenGL to OpenGL-ES - glBegin();

glBegin(GL_LINE_STRIP); 

z = -50.0f; 
for(angle = 0.0f; angle <= (2.0f*3.1415f)*3.0f; angle += 0.1f) 
    { 
    x = 50.0f*sin(angle); 
    y = 50.0f*cos(angle); 

    // Specify the point and move the Z value up a little 
    glVertex3f(x, y, z); 
    z += 0.5f; 
    } 

// Done drawing points 
glEnd(); 

ответ

1

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

Если память скудная, но ресурсы процессора многочисленны, тогда пакет массива «на лету», а затем зарегистрируйте массивы и вызовите glDrawArrays().

Гибридный подход заключается в использовании динамически выделенного массива, который может быть обновлен (при необходимости). Вы можете сделать это вручную, перераспределив динамический массив, когда он приблизится к заполнению, или с помощью какого-либо типа NSMutableArray. (Нотабене NSArray для статических массивов; NSMutableArrays (подкласс) является динамическими See here..)

Надеется, что это помогло :)

1

Звучит как классическая скорость/память. Если памяти очень мало, попробуйте использовать динамическую структуру данных. Если у вас есть разумная привязка к размеру массива, и из этого уравнения вы точно знаете, сколько вертов вам нужно, просто используйте простой статический массив со счетчиком, как вы и предполагали.

Похоже, вы знаете о массивах и рисуете массивы, поэтому я не буду вдаваться в это.

Удачи вам!