2012-11-18 103 views
3

我使用THREE.OBJLoader()加載.obj文件,並在將其添加到屏幕後將myobj []數組中的每個對象推入。THREE.js跟蹤模型(對象)

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數組中映射intersects [0] .object。

問候, ZB

回答

2

對象將是完全一樣的,即intersects[0].object和一些myobjs陣列成員都將是相同的實例的引用。如果你想找到索引到myobjs陣列(例如,以從那裏刪除它),你有幾種選擇:

  1. 路口後,環通myobjs和比較intersects[0].object.idmyobj[i].id(每個three.js所對象具有唯一的id屬性)。
  2. 您也可以自由分配在load事件處理的對象的任何合適的自定義屬性,所以只是簡單地按向myobjs之前添加一行object.myId = myobjs.length;,你可以索引數組後來與intersects[0].object.myId