2010-01-03 3 views
7

Я хочу нарисовать много сфер (~ 100k) с помощью OpenGL. До сих пор, я делаю что-то вродеРисование многих сфер в 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 с массивом, содержащим все точки, которые были очень эффективными. Есть ли лучший способ, чем приведенный выше код, рисовать много одинаковых объектов?

+1

как упоминал Грегори Пакосз, обычным способом это является установление. Тем не менее, я действительно не понимаю, что для реального мира потребует ~ 100 тыс. Сфер. Все, что я могу придумать, было бы лучше подавать с круглыми очками. Позаботьтесь о том, чтобы пролить свет на ваш прецедент? – Bahbar

+0

Я имитирую кольца Сатурна, и я хочу визуализировать результаты в реальном времени. Визуальная обратная связь «глубина» жизненно важна, и поэтому простые точки не работают. См. Например: http://hanno-rein.de/examplespheres.png и http://hanno-rein.de/examplepoints.png – hanno

+1

Хорошая иллюстрация. Вы можете имитировать внешний вид сферы, делая освещение в пиксельном шейдере. Даже просто применить базовую текстуру вам поможет. Точка, 100-килограммовые сферы неизбежно наносят ущерб перфомансу, в то время как очки не так много (как вы уже заметили). – Bahbar

ответ

8

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

Смотрите также Geometry instancing on Wikipedia.

3

Если вы нарисуете шары ~ 100 тыс., Вы можете рассмотреть возможность их рационализации вместо использования многоугольных сеток для их приближения. Документы GPU-Based Ray-Casting of Quadratic Surfaces by Sigg et al. (2006) и Splatting Illuminated Ellipsoids with Depth Correction от Gumhold (2003) показывают, как это сделать. Если вы это сделаете, вы можете повторно использовать большую часть своего быстрого кода спрайта.

2

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

Смежные вопросы