Учебники

Связывание атрибутов и объектов буфера

Каждый атрибут в программе вершинного шейдера указывает на объект буфера вершин. После создания объектов буфера вершин программисты должны связать их с атрибутами программы вершинного шейдера. Каждый атрибут указывает только на один объект буфера вершин, из которого они извлекают значения данных, а затем эти атрибуты передаются в шейдерную программу.

Чтобы связать объекты Vertex Buffer с атрибутами программы вершинного шейдера, вы должны выполнить следующие шаги:

  • Получить атрибут местоположения
  • Укажите атрибут на объект буфера вершин
  • Включить атрибут

Получить местоположение атрибута

WebGL предоставляет метод getAttribLocation (), который возвращает местоположение атрибута. Его синтаксис выглядит следующим образом —

ulong getAttribLocation (Object program , string name )

Этот метод принимает программный объект вершинного шейдера и значения атрибутов программы вершинного шейдера.

В следующем фрагменте кода показано, как использовать этот метод.

var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates"); 

Здесь shader_program является объектом программы шейдера, а координаты — атрибутом программы вершинного шейдера.

Укажите Атрибут для VBO

Чтобы назначить объект буфера переменной атрибута, WebGL предоставляет метод vertexAttribPointer () . Вот синтаксис этого метода —

void vertexAttribPointer ( location , int size , enum type , bool normalized , long stride , long offset )

Этот метод принимает шесть параметров, и они обсуждаются ниже.

  • Расположение — указывает место хранения переменной атрибута. При использовании этой опции вы должны передать значение, возвращаемое методом getAttribLocation () .

  • Размер — определяет количество компонентов на вершину в объекте буфера.

  • Тип — указывает тип данных.

  • Нормализовано — это логическое значение. Если true, неплавающие данные нормализуются до [0, 1]; в противном случае он нормализуется до [-1, 1].

  • Stride — указывает количество байтов между различными элементами данных вершины или ноль для шага по умолчанию.

  • Смещение — указывает смещение (в байтах) в объекте буфера, чтобы указать, из какого байта хранятся данные вершины. Если данные сохраняются с самого начала, смещение равно 0.

Расположение — указывает место хранения переменной атрибута. При использовании этой опции вы должны передать значение, возвращаемое методом getAttribLocation () .

Размер — определяет количество компонентов на вершину в объекте буфера.

Тип — указывает тип данных.

Нормализовано — это логическое значение. Если true, неплавающие данные нормализуются до [0, 1]; в противном случае он нормализуется до [-1, 1].

Stride — указывает количество байтов между различными элементами данных вершины или ноль для шага по умолчанию.

Смещение — указывает смещение (в байтах) в объекте буфера, чтобы указать, из какого байта хранятся данные вершины. Если данные сохраняются с самого начала, смещение равно 0.

Следующий фрагмент кода показывает, как использовать vertexAttribPointer () в программе:

gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false , 0, 0);

Включение атрибута

Активируйте атрибут вершинного шейдера для доступа к объекту буфера в вершинном шейдере. Для этой операции WebGL предоставляет метод enableVertexAttribArray () . Этот метод принимает местоположение атрибута в качестве параметра. Вот как использовать этот метод в программе —