Webgl three.js ParticleSystem创建提供了无效的\u操作:未绑定缓冲区\u数组
我正试图用下面的代码创建一个three.js ParticleSystem。 在安装在Linux主机上的Chrome上,这一点非常好,但当我尝试在Windows Chrome便携机上运行它时,我在第一次渲染调用时遇到以下WegGL错误: WebGL:无效的\u操作:VertexAttribute指针:无绑定数组\u缓冲区 WebGL:无效的\u操作:drawArrays:属性未正确设置 。。。着色器配置中的代码段:Webgl three.js ParticleSystem创建提供了无效的\u操作:未绑定缓冲区\u数组,webgl,three.js,vertex-shader,particle-system,Webgl,Three.js,Vertex Shader,Particle System,我正试图用下面的代码创建一个three.js ParticleSystem。 在安装在Linux主机上的Chrome上,这一点非常好,但当我尝试在Windows Chrome便携机上运行它时,我在第一次渲染调用时遇到以下WegGL错误: WebGL:无效的\u操作:VertexAttribute指针:无绑定数组\u缓冲区 WebGL:无效的\u操作:drawArrays:属性未正确设置 。。。着色器配置中的代码段: 'particle' : { uniforms: {
'particle' : {
uniforms: {
now: {
type: 'f',
value: 0
},
hitstart: {
type: 'f',
value: RADIUS
},
hitend: {
type: 'f',
value: RADIUS / 10
},
texture: {
type: "t",
value: 0,
texture: THREE.ImageUtils.loadTexture( "img/particle.png" )
},
color: {
type: 'v4',
value: particleColorToVector(this.particleColor,this.particleIntensity)
}
},
attributes: {
longitude: {
type: 'f',
value: []
},
latitude: {
type: 'f',
value: []
},
longitude_d: {
type: 'f',
value: []
},
latitude_d: {
type: 'f',
value: []
},
created: {
type: 'f',
value: []
},
lifetime: {
type: 'f',
value: []
},
size: {
type: 'f',
value: []
}
}, vertexShader: [
'uniform float now;',
'uniform float hitstart;',
'uniform float hitend;',
'attribute float created;',
'attribute float lifetime;',
'attribute float longitude;',
'attribute float latitude;',
'attribute float longitude_d;',
'attribute float latitude_d;',
'attribute float size;',
'attribute float height;',
'varying vec3 vNormal;',
'varying float age;',
。。。粒子系统的创建
function buildParticles() {
var shader = shaders['particle'];
var longs = shader.attributes.longitude.value;
var lats = shader.attributes.latitude.value;
var destx = shader.attributes.longitude_d.value;
var desty = shader.attributes.latitude_d.value;
var lifetimes = shader.attributes.lifetime.value;
var created = shader.attributes.created.value;
var sizes = shader.attributes.size.value;
particles = new THREE.Geometry();
for (var i = 0; i < particle_count;i++) {
particles.vertices.push( new THREE.Vector3(0,0,0));
longs.push(degree_to_radius_longitude(0));
lats.push(degree_to_radius_latitude(0));
created.push(tic);
destx.push(degree_to_radius_longitude(0));
desty.push(degree_to_radius_latitude(0));
lifetimes.push(0);
sizes.push(0);
}
var material = new THREE.ShaderMaterial ( {
uniforms: shader.uniforms,
attributes: shader.attributes,
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
transparent: true,
blending: THREE.AdditiveBlending,
depthTest: true
});
particleSystem = new THREE.ParticleSystem(
particles,
material
);
scene.add(particleSystem);
}
函数buildParticles(){
var着色器=着色器['particle'];
var longs=shader.attributes.longitude.value;
var lats=shader.attributes.latitude.value;
var destx=shader.attributes.longitude\u d.value;
var desty=shader.attributes.latitude\u d.value;
var lifetimes=shader.attributes.lifetime.value;
var created=shader.attributes.created.value;
变量大小=shader.attributes.size.value;
粒子=新的三个。几何体();
对于(var i=0;i<粒子计数;i++){
粒子。顶点。推(新的三个向量3(0,0,0));
长推(度到半径到经度(0));
横向推力(度-半径-纬度(0));
创建。推送(tic);
destx.push(度到半径到经度(0));
目标推力(度到半径和纬度(0));
生命周期。推(0);
大小。推(0);
}
var material=新的3.ShaderMaterial({
制服,制服,
属性:shader.attributes,
vertexShader:shader.vertexShader,
fragmentShader:shader.fragmentShader,
透明:是的,
混合:3.可加性贷款,
深度测试:正确
});
particleSystem=新的3.particleSystem(
粒子,
材料
);
场景.添加(particleSystem);
}
我不知道为什么VBO不受约束或不能受约束。
到目前为止,我发现了与此主题相关的问题:
但这两者似乎都不适用于我的情况
任何帮助都将不胜感激;) 仅供记录:
从顶点和片段着色器中删除了“Variable vec3 vNormal”,因为未使用该着色器修复了该问题。
然而,我很好奇,是什么让不同平台上的行为如此不同