Я изучал программирование на OpenGL с использованием оболочки Python PyOpenGL и сейчас работаю над своим первым проектом с ним. Этот проект представляет собой музыкальный визуализатор (не отличающийся от whitecap), использующий множество независимо движущихся и независимо окрашенных кубов.
Мой текущий метод состоит в том, чтобы иметь список отображения для одного куба и вызывать его многократно изменяя цвет и местоположение с помощью glColor и glTranslatef, например, так (псевдокод):
glPushMatrix()
glPushMatrix() #Why do I need to call this twice?
for x in xrange(...):
for z in xrange(...):
y = height[x,z] #numpy array
glTranslatef(x,y,z)
glColor((r,g,b))
glCallList(cube)
glTranslatef(-x,-y,-z)
glPopMatrix()
glPopMatrix()
Таким образом, я могу сделать около 10000 кубов, прежде чем я начну замечать частоту кадров, это нормально, но я бы хотел, чтобы она была быстрее, поэтому моя программа переносима на менее способные компьютеры, поэтому мой вопрос:
Какой самый эффективный способ сделать много одинаковых, но
независимые объекты, и я получу гораздо лучшую производительность, чем я
теперь используете списки отображения?
Должен ли я использовать C или обучение вершины
Буферизация
Примечание: я обнаружил, что отключение проверки ошибок дало значительное повышение производительности.