Moi wierzchołki są wykonane z tablicą z tej struktury:WebGL - Jak przekazywać niepodpisane wartości kolorów atrybutu vertex bajtów?
[ Position ][ colour ]
[float][float][float][byte][byte][byte][byte]
minięciu pozycję wierzchołków ma problemu:
gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aVertexPosition, 3, gl.FLOAT, false, 4, 0);
Ale nie mogę dowiedzieć się, jak mogę przejść kolorów cieniowanie. Niestety, nie można używać liczb całkowitych w module cieniującym glsl, więc muszę używać pływaków. Jak mogę uzyskać wartość koloru niepodpisanego bajtu w wartości koloru ruchomego glsl? Próbowałem to tak dla R, G i B sepperately ale wszystkie kolory są pomieszane:
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);
}
Pomijając twój problem, pomyślałeś o zaliczeniu attribu jako wektora 3-elementowego? Oszczędza to kod i czas. – Nobody
@Nobody To, co pierwotnie zrobiłem. Przełączyłem się tylko na przekazywanie ich osobno, aby upewnić się, że tablica nie stanowiła problemu. – Markus