Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> particle Engine 
:(
    Опции темы
Graf_h
Дата 21.4.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Может кто подскажет как в играх делают системы частиц,и как это можно в реализовать в ОпенЖЛ так что бы не затрачалось много ресурсов, а то я експерементирую, ставлю 100 000 частиц, но это жрет очень много ресурсов процессора, и в игре будут ужасные тормоза! + может подскажете как сейчас делают огонь, воду...


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Graf_h
Дата 25.4.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



спасибо


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
arilou
Дата 25.4.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Graf_h, Google particle system, OpenGL


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rickert
Дата 30.4.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Graf_h, Во-первых где ты в игре видел 100 000 частиц в кадре одновременно?
А во-вторых делается всё руками, через аналитическую геометрию. Я реализовывал источник частиц давно, но ничего сложного не было. Просто время и понимание.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
mr.DUDA
Дата 2.5.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 7
Всего: 232



Цитата(Rickert @  30.4.2008,  10:54 Найти цитируемый пост)
Graf_h, Во-первых где ты в игре видел 100 000 частиц в кадре одновременно?

Сорри, но вот у меня например максимум был 1,5 миллиона (потом тормозить начинало ниже 40 фпс). Вот.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
arilou
Дата 2.5.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



mr.DUDA, ты забыл добавить, что это работает на C#  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rickert
Дата 2.5.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



mr.DUDA, это в реальных игровых условиях? Неоптимально. Как правило берут размерами, а не кол-вом. ИМХО


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
arilou
Дата 2.5.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Rickert, в демке просто смотрели, сколько максимально переварит без потери перформанса.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rickert
Дата 3.5.2008, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



arilou, а ну так для тестов - то можно хоть и 2 kkk - понятное дело.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
arilou
Дата 3.5.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Graf_h, так что делай выводы. 100К частиц - это мало, чтобы загнуть комп. Скорее всего, у тебя ненужные перерасчеты происходят.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rickert
Дата 3.5.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Обычно основные такты забирают расчёты углов, если ты их применяешь. Sin / Cos - можно оптимизировать.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Graf_h
Дата 5.5.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Код

void render_part(){
glPushMatrix();

switch(zoomst){
case 1:zoom+=0.1;
    if (zoom>-40){zoomst=2;};
        break;
case 2:zoom-=0.1;
    if (zoom<-180){zoomst=1;};
        break;

};
rot+=0.00005f;

for (loop=0;loop<MAX_PARTICLES;loop++) // Цикл по всем частицам 
  {

    if (particle[loop].active) // Если частицы не активны 
    {
          float x=particle[loop].x; // Захватим позицию X нашей частицы 
          float y=particle[loop].y; // Захватим позицию Н нашей частицы
          float z=particle[loop].z+zoom; // Позиция частицы по Z + Zoom
          col=rand()%12;
          glColor4f(particle[loop].r,particle[loop].g,particle[loop].b,particle[loop].life);
        
         glRotatef(rot,0,0,1);

            glBegin(GL_TRIANGLE_STRIP);
                glTexCoord2d(1,1); glVertex3f(x+0.2f,y+0.2f,z); // Верхняя правая
                glTexCoord2d(0,1); glVertex3f(x-0.2f,y+0.3f,z); // Верхняя левая
                glTexCoord2d(1,0); glVertex3f(x+0.2f,y-0.2f,z); // Нижняя правая 
                glTexCoord2d(0,0); glVertex3f(x-0.2f,y-0.2f,z); // Нижняя левая

            glEnd();
         
                //dvigenie
             particle[loop].x+=particle[loop].xi/(slowdown*1000); 
             particle[loop].y+=particle[loop].yi/(slowdown*1000);
             particle[loop].z+=particle[loop].zi/(slowdown*1000);
             
             particle[loop].xi+=particle[loop].xg;// Притяжение по X для этой записи 
             particle[loop].yi+=particle[loop].yg; // Притяжение по Y для этой записи
             particle[loop].zi+=particle[loop].zg;
            
             particle[loop].life-=particle[loop].fade;
                    if (particle[loop].life<0.0f) // Если частица погасла 
                     {
                        
                          particle[loop].life=1.0f;
                          particle[loop].fade=float(rand()%100)/1000.0f+0.003f;
                          particle[loop].x=0.0f; // На центр оси X 
                          particle[loop].y=0.0f; // На центр оси Y
                          particle[loop].z=0.0f; // На центр оси Z
                          particle[loop].xi=xspeed+float((rand()%60)-32.0f)*1.0f;//Скорость и направление по оси X
                          particle[loop].yi=yspeed+float((rand()%60)-30.0f)*1.0f;//Скорость и направление по оси Y
                          particle[loop].zi=float((rand()%60)-30.0f)*10.0f;       //Скорость и направление по оси Z
                          particle[loop].r=colors[col][0]; // Выбор красного из таблицы цветов
                          particle[loop].g=colors[col][1]; // Выбор зеленого из таблицы цветов
                          particle[loop].b=colors[col][2]; // Выбор синего из таблицы цветов

                            
            
                    }

    }
}
glPopMatrix();
}



Вот собственно код! комп загинается  smile 


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Rickert
Дата 5.5.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



А ты потимизировать вообще пробовал? Одни и теже константы пересчитываешь по 10 раз - но это мелочь. У тебя вывод идёт через glBegin / glEnd.
Вообще забудь про них. Тебе надо смотреть массивы отображений.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Graf_h
Дата 5.5.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 482
Регистрация: 18.10.2007
Где: г. Ровно, Украина

Репутация: 3
Всего: 5



Цитата(Rickert @  5.5.2008,  12:36 Найти цитируемый пост)
Вообще забудь про них. Тебе надо смотреть массивы отображений. 

я знаю про glDrawArray, glDrawElements! их стоит использовать когда много вершин! а уменя рисуется всего 4!


--------------------
Иногда переменная - это просто переменная
PM MAIL ICQ   Вверх
Rickert
Дата 6.5.2008, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 6
Всего: 52



Graf_h, где четыре? Не вижу.
Это раз. А во-вторых попробуй закомментировать часть с частицами - может это вообще не из - за них?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1137 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.