Самый эффективный способ нарисовать несколько одинаковых объектов? - PullRequest
9 голосов
/ 26 сентября 2010

Я хотел бы сделать игру из множества кубов и планирую разместить ее на мобильных платформах, а также в сети, используя webgl. Моя проблема в том, что когда я делаю колл-вызов на куб, я получаю удар по частоте кадров. Есть ли способ, которым я могу сделать один вызов отрисовки в OpenGLES, чтобы нарисовать их? Единственная разница между кубиками - это положение и цвет.

Ответы [ 3 ]

4 голосов
/ 14 октября 2010

Я сам столкнулся с той же проблемой. Я задал подобный вопрос и вчера ответил на него сам. Взгляните на:

Эффективный способ рисования в OpenGL ES

Вы хотите создать свои буферы вершин и загрузить их в память видеокарты только один раз, используя gl.bufferData. Затем используйте ссылку на этот буфер каждый раз, когда выполняете gl.drawElements или gl.drawArrays. Пока в следующий раз содержимое вашей 3D-сцены не изменится, вы можете использовать этот буфер, загруженный в память видеокарты.

0 голосов
/ 28 сентября 2010

Если вы используете Vertex Arrays для вашего glDrawElements (), я бы предложил вместо этого использовать Vertex Buffer Objects. Это будет хранить данные на стороне сервера (в GRAM), а не на стороне клиента (в системной памяти). Таким образом, вы можете выполнять вызовы glDrawElements () с гораздо меньшими накладными расходами при передаче данных GPU <->.

Кроме того, вы можете хранить свои кубы в списках отображения. Таким образом, вы можете использовать glTranlate () для перемещения куба, а затем просто вызвать список отображения для его рендеринга. Единственное предостережение в использовании списков отображения - то, что вы делаете в списке отображения, является неизменным; Вы не можете изменить вызовы в списке отображения, не перекомпилировав его полностью.

0 голосов
/ 27 сентября 2010

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

...