Листинг 9.12. Завершающие вычисления цвета поверхности

if (SeparateSpecular)
gl_FrontSecondaryColor = vec4 (spec *gl_FrontMatenal .specular. 1.0): el se
color +- spec * gl_FrontMaterial.specular: gl_FrontColor = color:

Нет необходимости ограничивать значения (clamping) gl_FrontSecondaryColor и gl_FrontCol or, так как это будет сделано автоматически.

9;5. Сггсутствие освещения

,4. Двухстороннее освещение Чтобы в OpenGL имитировать двухстороннее освещение, нужно инвертировать нормаль поверхности и выполнить те же самые вычисления, что и в предыдущем разделе, но только со значениями задней поверхности материала. Возможно, при необходимости читатель выполнит такие вычисления более оптимально, а сама идея вычислений содержится в листинге 9.13.

Листинг 9.13. Вычисление двухстороннего освещения

normal - -normal:

II Инициализация переменных для накопления интенсивности освещения .amb = vec4 (0.0); diff = vec4 (0.0): Spec - vec4 (0.0);

// Цикл по всем источникам, вычисление компонентов освещения от каждого for (i = 0; i < NumEnabledLights: i++)

{
if (gl_LightSource[i].position.w == 0.0)
DirectionalLight(i. normal, amb, diff, spec); else if (gl_LightSource[i].spotCutoff == 180.0)
PointLightCi. eye. ecPosition3. normal, amb. diff. spec): else
SpotLigfttd, eye. ecPosition3. normal, amb, diff. spec):
}
color = gl_Backl_ightModelProduct.sceneColor + amb * gl_BackMaterial.ambient + diff * glBackMaterial .diffuse;
if (SeparateSpecular)
gIBackSecondaryColor = vec4 (spec *gl_BackMaterial .specular. 1.0); else
color +- spec * gl_BackMaterial.specular: gl_BackColor = color:

Нет необходимости ограничивать значения gl_BackSeconda ryCol or и gl_BackCol or, потому что это выполняется автоматически.

.5. Отсутствие освещения Если ни один источник освещения не включен, можно просто передать первичный и вторичный цвета вершины дальше (листинг 9.14).

Листинг 9.14. Установка значений цвета без освещения

If (SecondaryColor).
gl_FrontSecondaryColor = gl_SecondaryColor:

// Для gl_FrontColor ограничение будет выполнено автоматически gl_FrontColor - gl_Color:


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