我正在尝试使用 THREE.js 实现一个小型 Volumerenderer。为此,我有一个大型(至少 65000 个元素)数组,其强度值(太大而无法作为统一数组传递)到着色器,光线投射和所有这些都会发生。我想为此使用 THREE.DataTexture 但我似乎在着色器中没有任何 uv 坐标并得到以下错误:
Error: WebGL: vertexAttribPointer: must have valid GL_ARRAY_BUFFER binding
Error: WebGL: drawArrays: bound vertex attribute buffers do not have sufficient size for given first and count
这是我的设置:
在初始化函数中:
var data = new Uint8Array(textureArray);
var texture = new THREE.DataTexture(data, 128, 128, THREE.AlphaFormat);
texture.needsUpdate = true;
uniforms = {
texture: {type: "t", value: texture}
}
在顶点着色器中:
varying vec2 vUv;
void main(){
vUv = uv;
}
在片段着色器中:
uniform sampler2D texture;
varying vec2 vUv;
着色器用于粒子系统上的 THREE.ShaderMaterial。只要我在顶点着色器中没有 vUv = uv 分配,一切都可以正常工作,并且当我将纹理放在这样的立方体上时,纹理可以工作:
cube = new THREE.CubeGeometry(10,10,10);
material = new THREE.BasicMaterial({map: texture});
mesh = new THREE.Mesh(cube, material);
scene.add(mesh);
有没有人有类似的问题或知道我的错误可能在哪里?