我正在尝试创建具有three.js的粒子,目前作为粒子系统。 该项目的目标是创建具有已定义位置和唯一ID的粒子,并添加选项以选择多个粒子并检索其ID。
我做了一些研究,但发现了只能检测鼠标点击位置的方法。
所以,我正在寻找以下信息:
首先:是否有为单个粒子分配ID的选项(就像数字一样简单)? 第二:有没有办法在(弹出)窗口中选择多个粒子并查看它们的ID?
感谢您的帮助!
PS:我发现,您可以为THREE.ParticleDOMMaterial分配ID(我不知道,这个函数做什么!?)和THREE.ParticleBasicMaterial(为材质分配ID,但不为粒子本身分配ID)答案 0 :(得分:1)
默认情况下,所有Object3D
实例在three.js中都有唯一ID,而Particle继承该实例。 Object3D
还有一个名称属性,如果有帮助的话。
这是一个用于说明命名粒子的小片段:
for ( var i = 0; i < 100; i++ ) {
particle = new THREE.Particle( new THREE.ParticleCanvasMaterial( { color: Math.random() * 0x808008 + 0x808080, program: program } ) );
particle.name = "particle"+i;
particle.position.x = Math.random() * 2000 - 1000;
particle.position.y = Math.random() * 2000 - 1000;
particle.position.z = Math.random() * 2000 - 1000;
particle.scale.x = particle.scale.y = Math.random() * 10 + 5;
group.add( particle );
}
这是一个鼠标按下事件处理程序的示例,它在控制台中输出所点击粒子的名称和ID:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectScene( scene );
if ( intersects.length > 0 ) {
console.log("you clicked particle named '" + intersects[0].object.name + "' with id: " + intersects[0].object.id);
}
}
古德勒克!