if (DoingParticles) {
location = glGetUniformLocationARB(ProgramObject. "Time"):
ParticleTime += O.OOlf;
glUm formlfARB( location. ParticleTime) :
CheckOgl ErrorO :
}
13.6.2. Вершинный шейдер хлопушки с конфетти Вершинный шейдер (листинг 13.6) выполняет основную работу в примере рендеринга методом создания систем частиц. Вместо того чтобы просто преобразовать входные вершинные координаты, шейдер считает эти координаты начальными для вычисления новых координат с учетом значения uniform-переменной Time. И уже эти новые координаты будут преобразовываться и передаваться для рендеринга.
В вершинном шейдере определены attribute-переменные Velocity и StartTime (определение массивов дополнительных атрибутов вершин и связывание их с соответствующими переменными шейдера описано в предыдущем разделе). Поэтому у шейдера всегда будут обновленные значения переменных Vel ocity, StartTime, а также стандартных вершинных атрибутов gl_Vertex и gl_Color.
Вершинный шейдер сначала вычисляет время жизни частицы. Если это значение меньше нуля, частица еще не создана, и тогда ей просто присваивается цвет фона через uniform-переменную Background. (Можно показать еще не «родившиеся» частицы, присвоив им их собственный цвет. Можно также передавать значе13.6. Системы частиц
ние t во фрагментный шейдер как varying-переменную, чтобы затем отбрасывать фрагменты с t меньшим 0. Но здесь этого делать не обязательно.)
Если стартовое время частицы меньше, чем текущее время, для определения текущих координат частицы используется следующее кинематическое уравнение:
1 ?
Р = Д +vt+-atz-2
В этом уравнении Р,- - начальные координаты частицы, v - начальная скорость, (- время движения частицы, а - ускорение, Р - окончательные координаты частицы. Значение ускорения - обычное ускорение земного притяжения, 9,8 м/с. В нашей упрощенной модели считается, что гравитация влияет только на «/-координату частицы, а ускорение негативно (то есть скорость частицы постепенно уменьшается при падении на землю). Поэтому коэффициент а для t2 в уравнении будет константой, равной -4,9, и применяться будет только для «/-координаты.