Associando Atributos e Objetos Buffer

Cada atributo no programa de sombreador de vértice aponta para um objeto de buffer de vértice. Depois de criar os objetos de buffer de vértice, os programadores devem associá-los aos atributos do programa de sombreador de vértice. Cada atributo aponta para apenas um objeto de buffer de vértice do qual extraem os valores de dados e, em seguida, esses atributos são passados ​​para o programa de sombreador.

Para associar os Vertex Buffer Objects com os atributos do programa vertex shader, você deve seguir os passos abaixo -

  • Obtenha a localização do atributo
  • Aponte o atributo para um objeto de buffer de vértice
  • Habilite o atributo

Obtenha a localização do atributo

WebGL fornece um método chamado getAttribLocation()que retorna a localização do atributo. Sua sintaxe é a seguinte -

ulong getAttribLocation(Object program, string name)

Este método aceita o objeto de programa de sombreador de vértice e os valores de atributo do programa de sombreador de vértice.

O trecho de código a seguir mostra como usar esse método.

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

Aqui, shader_program é o objeto do programa shader e coordinates é o atributo do programa de sombreador de vértice.

Aponte o atributo para um VBO

Para atribuir o objeto buffer à variável de atributo, o WebGL fornece um método chamado vertexAttribPointer(). Aqui está a sintaxe deste método -

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

Este método aceita seis parâmetros e eles são discutidos a seguir.

  • Location- Especifica o local de armazenamento de uma variável de atributo. Nesta opção, você deve passar o valor retornado pelogetAttribLocation() método.

  • Size - Especifica o número de componentes por vértice no objeto buffer.

  • Type - Especifica o tipo de dados.

  • Normalized- Este é um valor booleano. Se verdadeiro, os dados não flutuantes são normalizados para [0, 1]; caso contrário, é normalizado para [-1, 1].

  • Stride - Especifica o número de bytes entre os diferentes elementos de dados do vértice, ou zero para o passo padrão.

  • Offset- Especifica o deslocamento (em bytes) em um objeto buffer para indicar de qual byte os dados do vértice são armazenados. Se os dados forem armazenados desde o início, o deslocamento é 0.

O seguinte snippet mostra como usar vertexAttribPointer() em um programa -

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

Habilitando o Atributo

Ative o atributo vertex shader para acessar o objeto buffer em um vertex shader. Para esta operação, o WebGL forneceenableVertexAttribArray()método. Este método aceita a localização do atributo como parâmetro. Aqui está como usar este método em um programa -

gl.enableVertexAttribArray(coordinatesVar);