Народный учебник по OpenGL


Урок 19. Машина моделирования частиц с использованием полосок из треугольников - часть 9



Наконец, мы задаем величину гравитации, которая воздействует на каждую частицу. В отличие от реальной гравитации, под действием которой все предметы падают вниз, наша гравитация сможет смещать частицы вниз, влево, вправо, вперед или назад (прим. переводчика: скорее всего это электромагнитное поле, а не гравитация). Вначале мы зададим гравитацию в полсилы, которая притягивает вниз. Чтобы сделать это, мы устанавливаем xg в 0.0f. Т.е. нет перемещения влево или вправо по плоскости X. Мы устанавливаем yg в -0.8f. Это создает притяжение вниз в полсилы. Если значение положительное, то притяжение вверх. Мы не хотим, чтобы частицы притягивались к нам или от нас, поэтому мы установим zg в 0.0f.


  particle[loop].xg=0.0f;  // Зададим горизонтальное притяжение в ноль

  

particle[loop].yg=-0.8f; // Зададим вертикальное притяжение вниз

 

particle[loop].zg=0.0f;  // зададим притяжение по оси Z в ноль

}

return TRUE; // Инициализация завершена OK

}


Теперь интересный материал. В следующем разделе кода мы выводим частицу, проверяем гравитацию, и т.д. Очень важно, чтобы Вы поняли, что происходит там, поэтому, пожалуйста, читайте тщательно :).


Мы сбрасываем матрицу просмотра модели только однажды. Мы позиционируем частицы, используя команду glVertex3f() вместо использования перемещения их, при таком способе вывода частиц мы не изменяем матрицу просмотра модели при выводе наших частиц.


int DrawGLScene(GLvoid) // Здесь мы все рисуем

{

 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Очистка экрана и буфера глубины

  glLoadIdentity(); // Сброс матрицы просмотра модели


Мы начинаем наш вывод с цикла. Этот цикл обновит каждую из наших частиц.


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

 

{


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


    if (particle[loop].active) // Если частицы не активны




Начало  Назад  Вперед



Книжный магазин