У меня есть большое количество объектов (не менее 10 000 частиц), таких как треугольники, квадраты, круги или сферы. На самом деле теперь у меня есть один объект, который я делаю много раз. Это выглядит следующим образом: функцияКак визуализировать большое количество подобных объектов?
for (int i=0; i<totalParticleCount; i++) {
drawObject->pos = hState[i].pos;
drawObject->draw(vp);
}
Draw для моего объекта Circle выглядит следующим образом, где переменная «VP» является продуктом проекции матрицы на вид матрицы:
void Circle::draw(const glm::mat4 &vp) {
glUseProgram(programId);
glUniformMatrix4fv(matrixId, 1, GL_FALSE, &(vp * getModelMatrix(pos, scale))[0][0]);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glDrawArrays(GL_TRIANGLE_FAN, 0, vertexNumber);
glDisableVertexAttribArray(0);
}
я обнаружил, что мой процесс рендеринга слишком медленный. Как повысить производительность рендеринга? Как я могу эффективно использовать opengl для рендеринга похожих объектов?
Система частиц звучит неплохо, но моя модель более сложная система. Моя модель жидкая, и я использую CUDA для обновления состояний частиц. Я могу собрать все свои фигуры в один VBO. В этом случае я могу установить матрицу модели для каждой фигуры? Или каждая вершина VBO будет иметь относительное положение от центра системы? Варианты 1 и 3-4 выглядят как выбор того, что я ищу. –