Главная » Статьи » » -=Програмирование=-

Уроки по програмированию в С+ OpenGL_GLSL часть вторая.
\-Базовые знания
    \- Шейдеры
        \-Урок2: Общий синтаксис

Урок2: Общий синтаксис

Синтаксис GLSL во многом сходен с синтаксисом Си. Особенности в основном касаются наличия
векторной математики и спецефических функций.

Помимо обычных типов переменных:

float - число с плавающей точкой одинарной точности;
int - целое число;
bool - логический тип (принимает значения true, false);

Также есть векторы и матрицы:

vec2, vec3, vec4 - float-вектор (размерность 2, 3, 4 соотв.);
ivec2, ivec3, ivec4 - int-вектор;
bvec2, bvec3, bvec4 - bool-вектор;
mat2, mat3, mat4 - float-матрица (размерность 2x2, 3x3, 4x4 соотв.);

Примечание: на видеокартах ATi обязательно наличие точки при работе с float-переменными,
    например, float a=2; или vec3 myVec=vec3(0.2,0,3.1); не скомпилится, правильно
    следует    писать float a=2.0; или vec3 myVec=vec3(0.2,0.0,3.1);

Допускается создание констант, например

const int abcd=5;
const vec3 vec1=vec3(0.5,1.2,-7.4);

для объявления вектора с одинаковыми компонентами можно указать только одно число,
также можно в качестве нескольких компонент указывать другой вектор. Например:

vec2 vec_a=vec2(0.4);
vec4 vec_b=vec3(0.2,vec_a,-5.1);
vec4 vec_c=vec3(vec_a,vec2(vec_b));

при использовании vec{n-m}(vec{n}) будет отброшено m последних компонент.

Доступ к компонентам вектора возможно через .xyzw или .rgba, без разницы:

vec_a.xy=vec_b.yz;
vec_b.r=vec_b.w;

при этом vec_a.xy эквивалентно vec2(vec_a)

Допустимы операции сложения, вычитания векторов, умножения вектора на число.

vec_a=vec_b.xy*2.0+vec2(vec_c);

Скалярное (dot) и векторное (cross) перемножение векторов а также нормализация (normalize)

vec_a=cross(vec_b,vec_c).xw;
float c=dot(vec_a,vec_b.yz);
vec_a=normalize(vec_a);

Для длинны вектора существует функция length
float l=length(vec_a);

Модификатор uniform позволяет передавать переменные из программы в шейдер, эти переменные
общие на протяжении работы всего шейдера пока они не будут изменены программой.

Модификатор varying позволяет использовать переменные как в вершинном, так и
во фрагментном шейдерах, Используется для передачи значений из вершинного шейдера
в текстурный, с интерполяцией между вершинами.

Модификатор attribute используется для работы с переменными, привязанными к вершинам.

Обо всем этом будет подробнее рассмотренно позже.





Источник:
Категория: -=Програмирование=- | Добавил: spirit (15.08.2008) | Автор:
Просмотров: 731 | Комментарии: 0 | Рейтинг: 0.0/0 |

Всего комментариев: 0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Форма входа

Категории каталога
-=SEO=- [8]
Раскрутка сайта в поисковиках
-=Дизайн=- [3]
Статьи по дизайну
-=CMS=- [3]
Статьи по работе с CMS
-=Програмирование=- [7]
Статьи по WEB и OS програмированию

Поиск