我的顶点是由具有这种结构的数组:WebGL - 如何传递无符号字节顶点属性的颜色值?
[ 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 sepperately但颜色全乱了:
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);
}
除了你的问题,你是否考虑过将attrib作为3元素向量?这节省了代码和时间。 – Nobody
@没有人 这就是我原来做的。我只是转而将它们单独传递,以确保阵列不是问题。 – Markus