2017-07-07 66 views
0

您好我最近做了原子和非原始形狀之間的碰撞檢測組件。我正在使用three.js中提供的邊界框碰撞。它的工作正常,但是當我將它用於自定義對象時,它會減慢整個體驗...請注意我的組件並告訴我最新的問題...碰撞檢測使用邊界框放緩幀向下

AFRAME.registerComponent('manual-body', { 
      matchingElements: function(attribute){ 
      var matchingElements = []; 
      var allElements = document.getElementsByTagName('*'); 
      for (var i = 0, n = allElements.length; i < n; i++){ 
       if (allElements[i].getAttribute(attribute) !== null){ 
       // Element exists with attribute. Add to array. 
       matchingElements.push(allElements[i]); 
       } 
      } 
      return matchingElements; 
      }, 
      tick: function(){ 
      var elements=this.matchingElements('manual-body'); 
      for(var i=0;i<elements.length;i++){ 
       if(this.el.id==elements[i].id){ 
       continue; 
       } 
       firstBB = new THREE.Box3().setFromObject(elements[i].object3D); 
       secondBB = new THREE.Box3().setFromObject(this.el.object3D); 
       var collision = firstBB.intersectsBox(secondBB); 
       if(collision){ 
       this.el.emit('collision', {elSource: this.el,elTarget:elements[i]}); 
       } 
      } 
      } 
     }); 

您認爲可能是滯後的原因是什麼?是不是蜱函數內部碰撞的邏輯或者是別的東西.....

感謝

+0

通過自定義對象,你的意思是不「四四方方」模式? –

+0

由自定義對象/非原始形狀我的意思是從這裏採取的3D obejcts https://free3d.com/在.obj格式....當與他們連接的組件放慢經驗.... – user287332

+0

它可能是發生,因爲三個調整箱子到你的模型有問題。你可以在模型中創建一個不可見的盒子,並使交叉點檢查它嗎? –

回答

1

我的猜測是,three.js所通過調整框邊界到自定義模型放慢您的網站。
我將手動添加一個盒子實體您的模型裏面:

<a-entity collada-model="my model"> 
     <a-box></a-box> 
</a-entity> 

,並與內框的碰撞檢測。 如果您正在嘗試做出某種物理的,儘量不要麥柯迪的Cannon.js implementation,因爲沒有必要重新發明輪子:P

UPDATE
如果您有問題,只能用.OBJ的,和COLLADA的不導致問題,請嘗試將obj模型轉換爲.dae。
如果您的問題仍然存在,請嘗試更改我的邊界。

+0

我試過使用dae對象,即collada模型....這些工作完全正常。 – user287332

+0

所以你只有一些.obj的問題? –

+0

你知道爲什麼obj的不工作?如果obj可以運行,因爲它們現在更常見並且可用... – user287332

0

方法THREE.Box3().setFromObject通過循環遍歷模型中的每個頂點來確定邊界框。這對於運行復雜模型的tick中的每個幀都有太多的工作要做。

你可能想看看aframe-extras球對撞機部件的高效,近似碰撞