void main (void) {
vec4 noisevec = texture3D(Noise. MCposition + Offset):
float intensity = ( noisevec[0] + noisevec[l] + noisevec[2] + noisevec[3]) * 1.5:
vec3 color = mix(SkyColor. CloudColor. intensity) * Lightlntensity: gl_FragColor = vec4 (color. 1.0):
}

13.4. Интерполяция ключевых кадров Рассмотрим еще один интересный эффект анимации - постепенный переход между двумя объектами. Его можно применять также для перехода от одного эффекта к другому за определенное количество кадров. Вместо того чтобы выполнять в приложении сложные вычисления перехода между объектами, можно делать это автоматически с помощью шейдера.

Этим способом можно задавать переход либо между разными формами объекта, либо между цветами, текстурами, процедурными рисунками и т. д. Все, что для этого нужно, - создать шейдер, который будет получать значение времени (или смены кадров). В некоторых случаях бывает достаточно линейного перехода. А для получения эффекта колебаний приложение должно вычислять коэффициент интерполяции с помощью функции сплайна, чтобы избежать прерывистости анимации. (Можно, конечно, делать эти вычисления и в шейдере, но лучше, чтобы приложение выполняло вычисления один раз для каждого кадра, чем для каждой вершины или каждого фрагмента, как было бы в шейдере.)

// (0.0. 0.0. 0.8) // (0.8. 0.8. 0.8)

// обновляется приложением для каждого кадра

13.4. Интерполяция ключевых кадров Через дополнительные атрибуты вершин можно передавать в шейдер координаты точек не одного, а двух объектов. Координаты первого объекта будут передаваться как обычно (glVertex, gl Col or, glNormal и т. д.). А координаты второго объекта будут передаваться через дополнительные атрибуты вершин 0, 1, 2 и т. д. Приложение может также передавать через uniform-переменную коэффициент сглаживания, а вершинный шейдер использует его для вычисления среднего значения из двух наборов параметров вершин. Вычисленные координаты вершины в дальнейшем передаются для преобразования, а вычисленная средняя нормаль используется при вычислении освещения.


⇐ Предыдущая| |Следующая ⇒