Так как вычисления сферического отображения и отражения не зависят от состояния заданного текстурного модуля, их можно выполнять отдельно, а результат будет использоваться для всех текстурных модулей. Для способов, реализуемых с использованием GL_0BJ ECT_L IN EAR и GL_EYE_LINEAR, существует уравнение плоскости для каждого компонента каждого набора текстурных координат. В первом примере компоненты gl_TexCoord[0] формируются умножением коэффициентов
Традиционные шейдеры
уравнения плоскости для указанного компонента на входные вершинные координаты. Во втором примере компоненты gl_TexCoord[Ûj вычисляются умножением коэффициентов уравнения плоскости на координаты вершины в пространстве координат обзора. В зависимости от типа обращения к текстуре на этапе обработки фрагментов вычислять t,plnq не обязательно.
9.8. Произвольное отсечение В OpenGL, чтобы применять произвольное отсечение (оно остается стандартной функциональностью между вершинным и фрагментным тендерами), вершинный шейдер должен преобразовать входные вершинные координаты в то же самое пространство координат, в котором определены плоскости отсечения. Обычно они определены в пространстве обзора, и код шейдера, приведенный в листинге 9.23, используется для преобразования координат вершин.
Листинг 9.23. Вычисление произвольного отсечения
gl_ClipVertex = glJtodelViewMatrix * glj/ertex:
9.9. Наложение текстуры
Чтение значений из текстурной памяти выполняется с помощью встроенных текстурных функций. Эти значения нужны для разных целей. Стандартная функциональность OpenGL включает поддержку формул для наложения текстур, определяемых символическими константами GL_REPLACE, GL_MODULATE, GLJIECAL, GL_BLEND и GL_ADD. Эти режимы работают по отдельности, в зависимости от формата текстуры, к которой обращаются. Следующий код - иллюстрация случая обращения к текстуре RGBA с помощью семплера texO. Переменная col or инициализирована в gl_Col or и изменена таким образом, что содержит значение цвета после наложения текстуры. GL_REPLACE - самый простой режим наложения текстуры. При этом происходит простая замена цвета текущего фрагмента цветом из текстуры (листинг 9.24).