将OBJ墙加载为静态体

时间:2016-12-06 11:37:22

标签: aframe wavefront

我正在将墙加载到我的场景中并应用Don McCurdy的aframe-extras脚本中的静态物理组件。然而,我只有两个墙壁表现为碰撞器(右墙和右列),而所有其他墙壁都没有物理。如何在所有墙壁上加载物理碰撞器?

请参阅演示 - https://mannymeadows.github.io/Noosa/。我错过了什么?

<html>
<head>
  <script src="https://aframe.io/releases/0.3.2/aframe.min.js"></script>
  <script src="https://mannymeadows.github.io/Noosa/aframe-extras.js" 
  </script>
</head>
<body>
 <a-scene physics>
   <a-assets>
     <img id="sky" src="https://mannymeadows.github.io/Noosa/models/pano-
     test.jpg">
     <a-asset-item id="room-obj" 
     src="https://mannymeadows.github.io/Noosa/models/shop-walls.obj">
     </a-asset-item>
     <a-asset-item id="stool-obj" 
     src="https://mannymeadows.github.io/Noosa/models/riva1920_onelove_obj.obj">  
     </a-asset-item>
     <a-asset-item id="stool-mtl" 
     src="https://mannymeadows.github.io/Noosa/models/riva1920_onelove_obj.mtl">
     </a-asset-item>
   </a-assets>
   <!-- Player -->
   <a-entity camera                
     universal-controls
     look-controls
     kinematic-body
     position="0 1.764 0">
   </a-entity>
   <!-- Floor -->
   <a-plane rotation="-90 0 0" width="54" height="54" color="#e2c5c9" 
   static-body></a-plane>
   <!-- Sky -->
   <a-sky src="#sky"></a-sky>
   <!-- Wall collider -->      
   <a-entity static-body obj-model="obj: #room-obj"></a-entity>
   <!-- furniture -->
   <a-entity static-body scale="0.05 0.05 0.05" rotation="-90 0 0" 
   position="0 0 -5" obj-model="obj: #stool-obj; mtl: #stool-mtl"></a-entity>
 </a-scene>
</body>
</html>

我可以加载应用了物理的简单墙OBJ模型,但是当墙变得稍微复杂时,静体组件将无法工作。

1 个答案:

答案 0 :(得分:2)

尝试使用A-Frame <a-box><a-plane>元素来制作墙而不是OBJ模型呢?如果你不需要复杂的房屋模型。我认为你的运动体会影响OBJ模型的边界框。 我的代码就像:

<a-entity id="house">
  <a-plane width="5"
    id="rightwall"
    height="3"
    position="2.5 1.6 -2.5"
    rotation = "0 90 0"
    material="side:double">
  </a-plane>
  <a-plane width="5"
    id="leftwall"
    height="3"
    position="0 1.6 -5"
    material="side:double">
  </a-plane>
  <a-plane width="5"
    id="backwall"
    height="3"
    position="0 1.6 0"
    material="side:double">
  </a-plane>
</a-entity>