Рисование многих сфер в OpenGL

Я хочу потянуть много сфер (~100k) использование OpenGL. До сих пор я делаю что-то как

for (int i=0; i<pnum; i++){
     glPushMatrix();
     glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z);
     glCallList(DListSPHERE);
     glPopMatrix();
}

Перед использованием надлежащих сфер я использовал GL_POINTS. Это позволило мне звонить glDrawArrays с массивом, содержащим все точки, который был очень эффективен. Существует ли лучший путь, чем вышеупомянутый код для привлечения многих, одинаковых объектов?

7
задан hanno 3 January 2010 в 15:26
поделиться

3 ответа

Посмотрите на эту страницу на instancing: она содержит много ссылок:

См. также Инстанцирование геометрии в Википедии.

.
8
ответ дан 6 December 2019 в 19:37
поделиться

Если нарисовать ~100k шаров, то вместо того, чтобы аппроксимировать их с помощью многоугольных сеток, можно рассмотреть возможность их лучеобразной аппроксимации. В работах GPU-основанное лучевое литье квадратичных поверхностей Сигг и др. (2006) и пластинчатое литье иллюминированных эллипсоидов с коррекцией глубины Гумхольда (2003), показано, как это сделать. Если вы сделаете это, то сможете повторно использовать большую часть вашего быстрого точечного спрайтового кода

.
3
ответ дан 6 December 2019 в 19:37
поделиться

Вы можете использовать точечные спрайты и фрагмент шейдера, чтобы дублировать эффект от рендеринга сферы без реальной геометрии сферы. Однако сначала я бы попробовал инстанцировать.

.
2
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: