我正在使用THREE.OBJLoader()加载.obj文件,并在将其添加到屏幕后推送myobj []数组中的每个对象。
var myObjs = [];
var loader = new THREE.OBJLoader();
loader.addEventListener( 'load', function ( event ) {
var object = event.content;
object.position.x=xpos;
object.position.y = ypos;
scene.add( object );
teeth.push(object);
});
loader.load( 'obj/myobj1.obj' );
loader.load('obj/myobj2.obj');
loader.load('obj/myobj3.obj');
我可以使用以下代码检查对象是否被点击:
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.intersectObjects( teeth, true );
if ( intersects.length > 0 ) {
intersects[0].object.position.z=50;
}
到目前为止一切顺利。现在我无法弄清楚如何跟踪我的myobjs []数组中的哪个对象是单击还是应该说我如何在myobjs数组中映射相交[0] .object。
此致 ZB
答案 0 :(得分:2)
对象将完全相同,即intersects[0].object
和一些myobjs
数组成员都将引用同一实例。如果要查找myobjs
数组的索引(例如,为了从那里删除它),您有以下几种选择:
myobjs
并将intersects[0].object.id
与myobj[i].id
进行比较(每个three.js对象都有一个唯一的id
属性)。load
事件处理程序中的对象分配任何合适的自定义属性,因此只需在将其推送到object.myId = myobjs.length;
之前添加一行myobjs
即可稍后使用intersects[0].object.myId
。