Глава 38. Шейдеры GLSL. Немного о спецификации 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Глава 38. Шейдеры GLSL. Немного о спецификации



Все числа в шейдере и все числа, передаваемые через юниформы, должны быть с точкой, т.е. 5.0, 1.0, 1.1. Это особенность видеокарт ATI.

Типы данных и переменные

 

В GLSL доступны следующие простые типы данных: float, bool, int. Эти типы данных точно такие же, как в C. Также доступны векторы для перечисленных выше типов данных с двумя, тремя или четырьмя компонентами. Она обьявляются как:

vec{2,3,4} — вектор из 2/3/4 float

bvec{2,3,4} — вектор из 2/3/4 bool

ivec{2,3,4}— вектор из 2/3/4 int

Также доступны квадратные матрицы 2x2, 3x3 и 4x4, соответствующие типы данных: mat{2,3,4}. Можно задать матрицу и произвольного размера, вот так задаётся матрица 4х2:

vec4 MyMatrix[2];

Обратите внимание, последний элемент матрицы из примера это [1][3].

Также доступен ряд специальных типов данных для работы с текстурами. Они называются «samplers» и нуждаются в доступе к значениям текстур, так же известным как текселы. Типы данных:

sampler1D — для 1D-текстур

sampler2D — для 2D-текстур

sampler3D — для 3D-текстур

samplerCube — для текстур кубических карт

sampler1DShadow — для карт теней

sampler2DShadow — для карт теней

Массивы в шейдерах объявляются так же, как в C, однако они не могут быть инициализированы при объявлении. Доступ к элементам — такой же, как в C или Delphi.

Также в GLSL доступны структуры. Синтаксис такой же, как в C:

struct TerrainRegion

{

float min;

float max;

};

uniform TerrainRegion region1;

То есть для использования структуры нужно, помимо создания её самой, создать ещё и юниформ переменную типа этой структуры. Обращатся из Delphi программы к GLSL структуре вы будете по образцу:

Uniform1f[‘region1.max]:= 2.0;

Uniform1f[‘region1.min]:= 0.5;

Следующие команды в таблицах — перевод стандартной спецификации GLSL 1.50 (http://www.opengl.org/registry/doc/GLSLangSpec.1.50.09.pdf). Из-за муторности перевода здесь представлены не все таблицы. Табличный материал в этой подглаве приведён для справки, запоминать такой объём мы не советуем.

Угловые и тригонометрические функции

 

Синтаксис Описание
genType radians (genType degrees) Переводит градусы в радианы.
genType degrees (genType radians) Переводит радианы в градусы.
genType sin (genType angle) Возвращает синус.
genType cos (genType angle) Возвращает косинус.
genType tan (genType angle) Возвращает тангенс.
genType asin (genType x) Арксинус. Возвращает угол, синус которого равен x. Значения, возвращаемые этой функцией, лежат в [–π/2; π/2]. Результат не определён, если |x|>1.
genType acos (genType x) Арксинус. Возвращает угол, косинус которого равен x. Значения, возвращаемые этой функцией, лежат в [0; π]. Результат не определён, если |x|>1.
genType atan (genType y, genType x) Арктангенс. Возвращает угол, тангенс которого равен y / x. Знак x и y используется для определения четверти окружности круга (квадранта). Значения, возвращаемые этой функцией, лежат в [–π; π]. Результат не определён, если x=y=0.
genType sinh (genType x) Возвращает гиперболический синус
genType cosh (genType x) Возвращает гиперболический косинус функции
genType tanh (genType x) Возвращает гиперболический тангенс функции
genType asinh (genType x) Аркгиперболический синус; возвращает x из его sinh.
genType acosh (genType x) Аркгиперболический косинус; возвращает неотрицательное обратное значение из его cosh. Результат не определён, если х<1.
genType atanh (genType x) Аркгиперболический тангенс; возвращает обратное из tanh. Результат не определён, если |x|≥1.

Общие функции

 

Синтаксис Описание
genType abs (genType x) genIType abs (genIType x) Возвращает модуль
genType sign (genType x) genIType sign (genIType x) Возвращает 1,0 если x>0; 0.0 если x=0; -1,0 если х<0.
genType floor (genType x) Возвращает значение до ближайшего целого числа, которое меньше больше или равно x.
genType trunc (genType x) Возвращает ближайшее целое к числу х, абсолютное значение которого не больше, чем абсолютное значение x.
genType round (genType x) Возвращает значение до ближайшего целого числа x. 0.5 будет округлено в направлении, выбранном на этапе объявления, возможно в направлении быстрейшего округления; в результате, возможно, что функция round(x) вернет значение, аналогичное функции roundEven(x).
genType roundEven (genType x) Округляет до ближайшего целого числа таким образом, что даже если x=3.5 или x=4.5, то будет возвращено 4.0.
genType ceil (genType x) Возвращает ближайшее целое число, которое >= x
genType fract (genType x) Возвращает x - floor (x).
genType mod (genType x, float y) genType mod (genType x, genType y) Возвращает x - Y * floor (x / y).
genType modf (genType x, out genType i) Возвращает дробную часть x и устанавливает i в целую часть. Оба они будут иметь тот же знак, что и x.
genType min (genType x, genType y) genType min (genType x, float y) genIType min (genIType x, genIType y) genIType min (genIType x, int y) genUType min (genUType x, genUType y) genUType min (genUType x, uint y) Возвращает y, если y<x, в противном случае возвращает x.  
genType max (genType x, genType y) genType max (genType x, float y) genIType max (genIType x, genIType y) genIType max (genIType x, int y) genUType max (genUType x, genUType y) genUType max (genUType x, uint y) Возвращает y, если x<y, в противном случае возвращается x.
genType clamp (genType x, genType minVal, genType maxVal) genType clamp (genType x, float minVal, float maxVal) genIType clamp (genIType x, genIType minVal, genIType maxVal) genIType clamp (genIType x, int minVal, int maxVal) genUType clamp (genUType x, genUType minVal, genUType maxVal) genUType clamp (genUType x, uint minVal, uint maxVal) Возвращает min (max (x, minVal), MAXVAL). Результат неопределён, если minVal> MAXVAL.

Геометрические функции

 



Поделиться:


Последнее изменение этой страницы: 2016-04-19; просмотров: 381; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.158.148 (0.006 с.)