Войти
ПрограммированиеФорумГрафика

Более реалистичный огонь с использованием частиц (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
21:45, 2 июля 2009

прикольно смотрится


#31
21:46, 2 июля 2009

fps=2. Сколько там у тебя частиц то на этот огонь уходит?!

#32
21:47, 2 июля 2009

GF660 LE
fps:5.

#33
21:52, 2 июля 2009

Всю тему не читал, скачал сразу 4-й вариант. А сколько частиц в кадре? На Radeon X2100 наблюдается слайд шоу...

#34
22:03, 2 июля 2009

10 000 частиц) Странно что такой низкий fps если честно. Но вот думаю как раз начать заниматься оптимизацией чтобы тянуло все 100 000 или даже миллион если получится.
Пока что рисую так:

/////////////////////////////////////////////////////////////////////////////////////
////
void CPU_ParticleSystem::Draw()
{
  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, m_glParticlesMegaTextureId);
  glDisable(GL_LIGHTING);
  
  glDisable(GL_DEPTH_TEST);
  glDisable(GL_ALPHA_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_COLOR, GL_ONE);

  glEnableClientState(GL_VERTEX_ARRAY); 
  glEnableClientState(GL_COLOR_ARRAY);
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);

  glVertexPointer(3,   GL_FLOAT, 4*sizeof(float), (float*)m_vertexPosBuffer);
  glColorPointer(4,    GL_FLOAT, 4*sizeof(float), (float*)m_vertexColorBuffer);
  glTexCoordPointer(2, GL_FLOAT, 2*sizeof(float), (float*)m_vertexTexCoordBuffer);

  glPushMatrix();
    glLoadIdentity();
    glDrawArrays(GL_QUADS, 0, m_vertexNum);
  glPopMatrix();

  glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  glDisableClientState(GL_COLOR_ARRAY);
  glDisableClientState(GL_VERTEX_ARRAY);

  glDisable(GL_BLEND);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);
}

Шина дохнет конечно, но физика на CPU сейчас считается..

#35
22:08, 2 июля 2009

у меня самого 100FPS на GTX 260 => думаю боттлнек именно в отрисовке.

#36
22:17, 2 июля 2009

Ладно, какие есть советы по оптимизации именно отрисовки?
Ну , допустим на GPU считать физику и рисовать через VBO - это понятно. А в чем еще может быть причина столь низкой скорости?
Альфа-смешивание? Можно как-то это ускорить?

И еще я тупой вопрос задам, если я просто отрисовку через VBO сделаю, но физику и вершины по прежнему буд считать на CPU, станет быстрее?

#37
23:17, 2 июля 2009

Открой OpenGL или DirectX враппер от Magic Particles и посмотри как там отрисовка устроена, скорость вполне приличная. А про 100.000 - ты так не прикалывайся )))

#38
23:21, 2 июля 2009

>И еще я тупой вопрос задам, если я просто отрисовку через VBO сделаю, но физику и вершины по прежнему буд считать на CPU, станет быстрее?

Очень быстрее станет. По крайней мере, когда мы для OpenGL делали враппер, разница была очень большая. И бообще, с частицами как-раз упирается в отрисовку всё, а не в рассчёт (не всегда, но в большинстве случаев именно так).

#39
10:38, 3 июля 2009

FROL
Да, в динамике стало лучше, правда ты там где-то с текстурными координатами ошибся, потому как полосы иногда проскакивают.

И еще уж больно однороден у тебя огонь в центре - одноцветен, в реале такого нет.

#40
11:42, 3 июля 2009

FROL
используй VBO, используй индексированный вцывод примитивов, лучше треугольниками, а не квадратами.

glDrawElements(GL_TRIANGLES,...);
будет меньше вершин гоняться по шине.
используй не float для цвета а unsigned char, экономия размера вершины будет.
glColorPointer(4, GL_UNSIGNED_BYTE,....
проверь, может CPU у тебя загружен сильно? Как частицы расчитываешь? new/delete для каждой? лично у меня 55% при запуски firedemo3
#41
12:17, 3 июля 2009

ок, пасибо, попробую VBO.
Нет, new/delete не делаю, что я совсем баклан что-ли) CPU -  видимо нет раз у меня сотня FPS а у других 2. Но это я потом еще проверю.

Osiris
> И еще уж больно однороден у тебя огонь в центре - одноцветен, в реале такого
> нет.
Ну да. Так получается из-за переполнения буфера цвета. Просто частиц много и все клампится в желтый. я не знаю как это можно изменить.

#42
12:17, 3 июля 2009

по мне так ЦПУ не причём, 10 000 частиц со смешиванием тупо грузят видяху, они же все рисуются, в не зависимости от того перекрыты или нет. Если это действительно так, то с 10 000 частиц ты нагружаешь пиксельный шейдер примерно так же как еслибы отрисовал 200 раз фулскрин.

#43
12:22, 3 июля 2009

FROL
> Так получается из-за переполнения буфера цвета. Просто частиц много и все
> клампится в желтый. я не знаю как это можно изменить.

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

#44
12:34, 3 июля 2009

понятно. Ну ладно, на самом деле я хотел попробовать загнать как можно больше частиц. Но за совет спасибо. И работать будет быстрее и реалистичнее получится - ок, м.б. попробую позже.

Страницы: 1 2 3 4 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.