Уроки по програмированию в С+ OpenGL_GLSL часть четвёртая.
\-Базовые знания \- Шейдеры \-Урок4: Аппаратные uniform-переменные и мат.функции
Урок4: Аппаратные uniform-переменные и мат.функции
Подробно можно прочитать здесь http://opengl.org/documentation/glsl/ скачав .pdf спецификацию
Я приведу лишь самый основной список (наиболее часто используемые):
функции тригонометрии (типа float, с одним аргументом типа float): radians(),degrees(),sin(),cos(),tan(),asin(),acos(),atan()
Степенные функции: float pow(float a,float b); //возводит a в степень b float exp(float); //экспонента float log(float); //логарифм float sqrt(float);//корень float inversesqrt(float); //единица деленная на корень
функция обрезания переменной a от значения from до to: float clamp(float a, float from float to)
функции min/max выбирают из двух float-переменных меньшее/большее float minimum=min(0.5,a);
Абсолютное значение числа: float abs(float)
uniform-переменные, заранее заданные в GLSL(сильно сокращенный список):
Вершинный шейдер:
gl_Color цвет (атрибут вершины) gl_Normal нормаль (атрибут вершины) gl_Vertex позиция (атрибут вершины) gl_MultiTexCoord{ 0..7 } координата текстуры (атрибут вершины) gl_ModelViewMatrix Матрица объектов gl_ProjectionMatrix Матрица проекции gl_ModelViewProjectionMatrix Произведение этих матриц gl_NormalMatrix Матрица нормалей gl_TextureMatrix{ 0..8 } Матрица трансформации текстуры gl_Fog Значение тумана gl_FogCoord Координата тумана gl_FrontColor Цвета лицевых и задних граней, ShaderModel 3 gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_FrontFacing Лицевая(true) или задняя(false) грань, ShaderModel 3
gl_Position В эту переменную записывается координата после обработки вершинным шейдером которая затем передается на отрисовку вершины
gl_TexCoord В эту переменную записывается координата текстуры после обработки вершинным шейдером которая затем передается в пиксельный шейдер
Пиксельный шейдер:
gl_TexCoord координата текстуры (после обработки вершинным шейдером)
gl_FragColor В эту переменную записывается цвет фрагмента после обработки шейдера, собственно это конечный цвет пикселя
и некоторые константы: gl_MaxLights максимальное количество источников освещения gl_MaxTextureUnits максимальное количество текстур gl_MaxVertexTextureUnitsGL2 максимальное количество текстур в вершинном шейдере gl_MaxFragmentTextureUnitsGL2 максимальное количество текстур во фрагментном шейдере
Примечание: не вижу смысла в константах, лучше делать проверку один раз в программе чем хрен знает сколько раз в шейдере. Привел лишь для факта, что они есть. Так их где-то десяток, все есть в спецификации.