WebGL - Как передать unsig ned byte vertex attribute color values?

Мои вершины состоят из массива со следующей структурой:

[     Position      ][        colour        ]
[float][float][float][byte][byte][byte][byte]

Передача положения вершины не проблема:

gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aVertexPosition, 3, gl.FLOAT, false, 4, 0);

Но я не могу понять, как передать цвета шейдеру. К сожалению, внутри шейдера glsl невозможно использовать целые числа, поэтому мне приходится использовать числа с плавающей запятой. Как мне передать значение цвета беззнакового байта в значение цвета с плавающей запятой glsl? Я пробовал это для r, g и b по отдельности, но все цвета перепутались:

gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aR, 1, gl.BYTE, false, 15, 12);

Vertex Shader (colouredPoint.vs)

precision highp float;

attribute vec3 aVertexPosition;
attribute float aR;
attribute float aG;
attribute float aB;

uniform mat4 world;
uniform mat4 view;
uniform mat4 proj;

varying vec3 vVertexColour;

void main(void){
    gl_PointSize = 4.0;  
    gl_Position = proj * view * world * vec4(aVertexPosition, 1.0);
    vVertexColour = vec3(aR, aG, aB);
} 

Pixel Shader (colouredPoint.fs)

precision highp float;

varying vec3 vVertexColour;

void main(void){
    gl_FragColor = vec4(vVertexColour, 1);
} 
17
задан genpfault 26 August 2011 в 14:04
поделиться