□ преобразования вершин;
□ преобразования нормали, нормализации;
□ генерирования текстурных координат;
□ преобразования текстурных координат;
2,3, Программируемые процессоры OpenGL
□ настройки освещения;
□ наложения цвета материала.
Так как этот процессор является программируемым, его можно использовать и для других вычислений. Шейдеры, которые предназначены для выполнения на этом процессоре, называются вершинными тендерами. Вершинные шейдеры можно использовать для определения общей последовательности операций, которые будут выполняться над вершиной и другими связанными с ней данными. Вершинные шейдеры, выполняющие некоторые из вычислений, перечисленных в списке, отвечают за написание кода для всей функциональности из списка. Например, невозможно использовать одновременно и стандартные функции преобразования вершины и нормали, и вершинный шейдер для вычисления освещения. Написанный вершинный шейдер должен выполнять все три операции.
Вершинный процессор не может заменить графические операции, которым требуются данные о нескольких вершинах или о топологии объектов. Стандартные операции, которые не могут выполняться вершинным и фрагментным процессорами, - это вычисление перспективы и создание графического окна, сборка примитивов, отсечение конусом и плоскостями, отбраковка задних поверхностей, выбор двухстороннего освещения, режим, многоугольников, смещение многоугольников, плоское или мягкое затенение, диапазон глубины.
Вершинные шейдеры можно использовать, чтобы улучшить алгоритм, выполняемый на вершинном процессоре. Они получают входные данные и производят выходные данные (рис. 2.2).
Для управления входными и выходными данными вершинного процессора используются квалификаторы типов, определенные как часть языка шейдеров OpenGL.
Переменные, определенные в вершинном шейдере, рассматриваются как переменные атрибутов. Эти переменные представляют собой данные, которые передаются вершинному процессору от приложения. Поскольку эти типы используются только для передачи данных о вершинах из приложения, их можно использовать лишь как часть вершинного шейдера. Приложения могут задавать значения атрибутов либо между вызовами g 1 Begi п и gl End, либо вызовом функций работы с вершинными массивами, так что значения могут меняться так же часто, как и текущая вершина, то есть задаваться для каждой вершины отдельно.