В конце концов я дошел до того, что могу добавить цвет к своим вершинам. Но теперь я хочу улучшить свою скорость FPS. Вот текущая ситуация. У меня есть большое количество вершин (~ 200000), и каждая из них может быть в одном из ~ 150 классов. Каждый класс отличается по цвету. В настоящее время я рисую свои вершины как:
glEnableClientState(GL_VERTEX_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
glVertexPointer(3, GL_FLOAT, 0, None)
glEnableClientState(GL_NORMAL_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
glNormalPointer(GL_FLOAT, 0, None)
glEnableClientState(GL_COLOR_ARRAY)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferColors)
glColorPointer(3, GL_FLOAT, 0, None)
glDrawArrays( GL_POINTS, 0, len(self.vertices) / 3 )
Все отлично работает и FPS ~ 60. Все мои буферы генерируются только во время инициализации. Но теперь цвета, которые представляют каждый класс, будут меняться быстро, примерно каждую миллисекунду. При этом цвета также будут меняться, поэтому мне придется заново создавать свой буфер цвета для каждого рисования, и для 200000 вершин у меня возникает ощущение, что FPS будет близок к 0. Исправление, которое я пытаюсь реализовать, состоит в том, чтобы сохранить фиксированный цвет буфер, но вместо реальных цветов они сохранят указатель на класс, которым он представлен. Таким образом, изменится только 200 цветов классов. Проблема в том, что я не знаю, как это можно реализовать в OpenGL. Это выполнимо? Есть какие-нибудь указатели, как это сделать?