Параметры кирпича

Рис. 6.1. Параметры кирпича Теперь, когда определены желаемый результат и параметры, можно приступить к созданию вершинного и фрагментного шейдеров.

6.2. Вершинный шейдер

В вершинном шейдере должны выполняться операции над каждой вершиной. Чтобы создать вершинный шейдер для данного примера, нужно ответить на три вопроса.

1. Какие данные необходимо передавать вершинному шейдеру для каждой вершины (в аИпЬ^е-переменных)?

6,2. Вершинный шейдер

2. Какие глобальные переменные состояния понадобятся вершинному шейдеру (uniform-переменные)?

3. Чтоявится результатом вычислений в вершинном шейдере (varying-переменные)? Рассмотрим эти вопросы по отдельности.

Если не задать координаты каждой вершины, то вообще невозможно будет что-либо нарисовать. Более того, освещение поверхности объекта не вычислить, если не будут указаны нормали для каждой координаты, в которой нужно вычислять освещение. Так что минимальными входными параметрами будут координаты и нормаль для каждой вершины. Эти параметры уже определены в OpenGL как встроенные переменные g1_Vertex и g1_Normal. Если приложение будет использовать стандартные функции для задания координат и нормали, то никаких дополнительных attribute-переменных в вершинном шейдере объявлять не нужно, а чтобы получить эти значения в шейдере, следует просто обратиться Kgl_Vertex и gljforrral.

Для реализации алгоритма рисования кирпичной стены понадобится доступ к некоторым параметрам состояния OpenGL. Например, таким параметром является текущая матрица модели-вида-проекции (gl Jtodel ViewProjectionMatri х) для преобразования координат вершин в пространство координат отсечения. Нужно получить доступ к текущей матрице модели-вида (gl _Model Vi ewMatri x) для преобразования координат вершин в пространство обзора при вычислении освещения. Также необходимо будет преобразовать нормали в пространство обзора, используя матрицу преобразования нормали (gl Normal Mat ri x, которая создается просто обратным тран-спонированием верхнего левого угла матрицы gl_Model Vi ewMatri х размером 3x3).


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