粒子ID并在Three.js中检索多个ID

时间:2011-12-12 15:48:33

标签: select three.js

我正在尝试创建具有three.js的粒子,目前作为粒子系统。 该项目的目标是创建具有已定义位置和唯一ID的粒子,并添加选项以选择多个粒子并检索其ID。

我做了一些研究,但发现了只能检测鼠标点击位置的方法。

所以,我正在寻找以下信息:

首先:是否有为单个粒子分配ID的选项(就像数字一样简单)? 第二:有没有办法在(弹出)窗口中选择多个粒子并查看它们的ID?

感谢您的帮助!

PS:我发现,您可以为THREE.ParticleDOMMaterial分配ID(我不知道,这个函数做什么!?)和THREE.ParticleBasicMaterial(为材质分配ID,但不为粒子本身分配ID)

1 个答案:

答案 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);

                }

            }

古德勒克!