Javascript 火焰不在THREE.js World中显示
我正在使用THREE.js和spark.js制作火焰,但是当我渲染世界时,我看不到火焰,世界是空的。我看到了控制台上的错误,但是没有关于这个的错误。我试了很多次,但没有发现真正的错误。这是代码Javascript 火焰不在THREE.js World中显示,javascript,three.js,webgl,Javascript,Three.js,Webgl,我正在使用THREE.js和spark.js制作火焰,但是当我渲染世界时,我看不到火焰,世界是空的。我看到了控制台上的错误,但是没有关于这个的错误。我试了很多次,但没有发现真正的错误。这是代码 threexSparks = new THREEx.Sparks({ maxParticles : 400, counter : new SPARKS.SteadyCounter(300) })
threexSparks = new THREEx.Sparks({
maxParticles : 400,
counter : new SPARKS.SteadyCounter(300)
});
//threexSparks.position.x = 1000;
// setup the emitter
//var emitter = threexSparks.emitter();
var counter = new SPARKS.SteadyCounter(500);
var emitter = new SPARKS.Emitter(counter);
var initColorSize = function() {
this.initialize = function(emitter, particle) {
particle.target.color().setHSV(0.3, 0.9, 0.4);
particle.target.size(150);
};
};
emitter.addInitializer(new initColorSize());
emitter.addInitializer(new SPARKS.Position(new SPARKS.PointZone(new THREE.Vector3(1000, 0, 0))));
emitter.addInitializer(new SPARKS.Lifetime(0, 0.8));
emitter.addInitializer(new SPARKS.Velocity(new SPARKS.PointZone(new THREE.Vector3(0, 250, 00))));
emitter.addAction(new SPARKS.Age());
emitter.addAction(new SPARKS.Move());
emitter.addAction(new SPARKS.RandomDrift(1000, 0, 1000));
emitter.addAction(new SPARKS.Accelerate(0, -200, 0));
谢谢这是粒子和WebGL渲染的奇怪问题。如果您使用的是CanvasRender,那就太好了。但对于WebGL来说不是。 在代码中,您还忘记了为粒子创建3JS对象。Sparks.js仅允许粒子的接口。但是你需要创建粒子本身。 您可以看看我的JSFIDLE示例。在这里,我使用了sparks.js库的修改版本。更改只是为了能够覆盖向量池行为 主要部分有:
var particleCount = 1800,
particles = new THREE.Geometry(), //store particle vertices
pMaterial = new THREE.ParticleBasicMaterial({
size: 10,
map: txture, //in jsfiddle i create texture from canvas
transparent: true
});
var particleSystem = new THREE.ParticleSystem(particles, pMaterial); //threejs particle system
//initialize our particles (and set that are dirty). sparkjs initialize it later for us
for(var p = 0; p < particleCount; p++) {
v = new THREE.Vector3(numMax,numMax,numMax);
v.isDirty=true;
particles.vertices.push(v);
}
SPARKS.VectorPool.__pools = particles.vertices; //initialize vectors pool
当然,您必须关心sparks.js中使用的和手动预创建的粒子数
我的sparkjs叉子在这里:在这里我修复了最新tweenjs的问题,并添加了我之前描述的其他小更改。非常感谢。。。。。。。实际上我正在做一个项目,你解决了我的关键部分。。。。。。。。再次感谢。。。。。。。
SPARKS.VectorPool = {
__pools: [],
get: function() {
var ret = _.find(this.__pools, function(v){return v.isDirty});
ret.isDirty=false;
return ret;
},
release: function(v) {
v.isDirty=true;
v.set(numMax,numMax,numMax);
}
};