đỉnh của tôi được tạo thành từ một mảng với cấu trúc này:WebGL - Làm cách nào để chuyển các giá trị màu của thuộc tính đỉnh không dấu?
[ Position ][ colour ]
[float][float][float][byte][byte][byte][byte]
Đi qua vị trí đỉnh là không có vấn đề:
gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aVertexPosition, 3, gl.FLOAT, false, 4, 0);
Nhưng tôi không thể tìm ra làm thế nào tôi có thể vượt qua màu sắc để trình đổ bóng. Thật không may, nó không thể sử dụng số nguyên bên trong shader glsl vì vậy tôi phải sử dụng phao. Làm thế nào tôi có thể nhận được giá trị màu byte chưa ký của tôi vào giá trị màu phao nổi? Tôi đã thử nó như thế này cho r, g, b sepperately nhưng màu sắc được tất cả điều sai lầm:
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);
}
Ngoài vấn đề của bạn, bạn có nghĩ đến việc chuyển giao người gác như là một vector phần tử 3 không? Điều này tiết kiệm mã và thời gian. – Nobody
@Nobody Đó là những gì tôi đã làm. Tôi chỉ chuyển sang cho họ một cách riêng biệt để đảm bảo mảng không phải là vấn đề. – Markus