Vellow 0.6. 0.5. 0.0. 1.0
HalfSpaceO 1.0. 0.0. 0.0. 0.2
HalfSpacel 0.309016994. 0.951056516. 0.0. 0.2
HalfSpace2 -0.809016994. 0.587785252. 0.0. 0.2

НаШрасеЗ -0.809016994. -0.587785252. 0.0. 0.2

HalfSpace4 0.309016994. -0.951056516. 0.0. 0.2
InOrOutlnit -3.0 StripeWidth 0.3 FWidth 0.005

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

Фрагментный шейдер в описываемой паре шейдеров - «рабочая лошадка», а вершинный шейдер должен только вычислить координаты центра шара в пространстве координат обзора и координаты пространства отсечения для каждой вершины. Приложение может передавать координаты центра сферы в пространстве координат обзора, но вершинный шейдер и так делает немного работы, и выполнение в нем таких вычислений означает, что приложению теперь не нужно знать о матрице модели-вида. Это значение можно легко вычислить во фрагментном шейдере, но тогда пострадает производительность. Поэтому в нашем случае лучше всего выполнить эти вычисления в вершинном шейдере и передать результат как varying-переменную (листинг 11.4).

Листинг 11.4. Вершинный шейдер игрушечного шара

varying vec4 ECposition: // координаты поверхности в пространстве

// координат обзора varying vec4 ECbal1 Center; // центр шара а пространстве координат обзора uniform vec4 BallCenter; // центр шара в модельных координатах

void main(void)
{
ECposition = glJfodelViewMatrix * gl__Vertex; ECballCenter = glModelViewMatrix * BallCenter: gl_Position = ftransformO :
}

Процедурные текстурные шейдеры

11.2.3. Фрагментный шейдер

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

vec4 normal: // Вычисленная нормаль

vec4 р; // Точка

vec4 surfCol or: // вычисленный цвет поверхности float intensity: // Вычисленная интенсивность освещения vec4 distance; II Вычисленные значения расстояния float inorout: // Счетчик для вычисления шаблона звезды


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