Листинг 13.2 (продолжение)

uniform vec3 LightPosition; uniform float SpecularContri.bution; uniform float DiffuseContribution;

uniform float Weight; // обновляется приложением для каждого кадра attribute vec4 VertexB; attribute vec3 Normal В:

void mainCvoid)

{

vec4 vert = mix(gl_Vertex, VertexB, Weight): vec3 ecPosition = vec3 (gl_ModelViewMatrix * vert); vec3 tnorm = mix(gl_Normal. NormalB. Weight);

tnorm = normalize(gl_NormalHatrix * tnorm);

vec3 lightVec = normalize(LightPosition - ecPosition);

vec3 reflectVec = reflectOlightVec. tnorm);

vec3 viewVec = normalize(-ecPosition);

float spec = max(dot(reflectVec. viewVec). 0.0);

spec = pow(spec, 16.0);

Lightlntensity = DiffuseContribution * max(dot(lightVec. tnorm), 0.0)

+ SpecularContribution * spec;

TexCoord = gl_MultiTexCoord0.st;

gl_Position = gl_ModelViewProjectionHatrix * vert;

}

13.5. Другие эффекты перехода

Еще одним эффектом перехода является постепенное исчезновение объекта. В этом случае управляющее значение будет значением прозрачности объекта. Объект может быть нарисован полностью непрозрачным (значение прозрачности 1,0), полностью прозрачным (прозрачность 0) и полупрозрачным (значение прозрачности между 0 и 1,0).

Можно также скрыть части объекта директивой di scard. Для этого в шейдере полосок, описанном в разделе 11.3, при перерисовке объекта отбрасывается определенное количество пикселов. Коэффициент отбрасывания пикселов может плавно меняться от 0 до 1,0 при появлении объекта и от 1,0 до 0 при его исчезновении. Вместо такого коэффициента можно использовать значение функции шума для каждой точки поверхности. Таким образом можно создать эффект разъедания или ржавления.

13.6. Системы частиц

В начале 80-х гг. Билл Ривз и его коллеги изобрели новый способ рендеринга примитивов. Традиционные методы рендеринга больше подходят для рисования ровных, четко определенных поверхностей. Ривз придумал способ рендеринга объек тов, называемых нечеткими - огня, дыма, распыленной жидкости, хвостов комет, фейерверков и других природных явлений. Эти явления нечеткие, так как не имеют определенных границ, а вид объектов меняется с течением времени.

Способ, которым Ривз решил проблему, описан в статье [5]. Системы частиц и раньше использовались при рендеринге, но по-другому. Ривз стал задавать каждой частице набор начальных условий и устанавливать набор вероятностных правил поведения частиц с течением времени.

Существует три основных отличия метода создания системы частиц от традиционного метода рисования поверхности объекта.

1. Объект представлен скоплением частиц, определяющих объем, а не многоугольников или кривых, определяющих поверхность.


⇐ вернуться назад | | далее ⇒