three.js-Uncaught ReferenceError:未定义场景

时间:2017-06-04 19:35:38

标签: javascript three.js aframe

我是a-frame,three.js的新手,我正在尝试使用.obj模型创建一个简单的场景我的目的是创建一个树然后克隆它但是它给出了一个错误,说明未捕获的ReferenceError:场景不是定义

 <a-scene>
 <a-assets>
   <img id="my-image" src="sky.jpg">
   <img id="grass" src="grass.jpg">
   <a-asset-item id="tree-obj" src="tree-05.obj"></a-asset-item>
   <a-asset-item id="tree-mtl" src="tree-05.mtl"></a-asset-item>
   <a-asset-item id="lion-cub-obj" src="lion-cub.obj"></a-asset-item>
   <a-asset-item id="lion-cub-mtl" src="lion-cub.mtl"></a-asset-item>
 </a-assets>
  <a-plane src="#grass" height="200" width="200" rotation="-90 0 0"></a-plane>
   <a-obj-model src="#tree-obj" mtl="#tree-mtl" scale="0.05 0.05 0.05" id="group" position=" 4 0.5 0"></a-obj-model>
   <script>
    var mtlLoader = new THREE.MTLLoader();
    mtlLoader.setPath('./');
    mtlLoader.load('tree-05.mtl', function(materials) {
    materials.preload();
    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials(materials);
    objLoader.setPath('./');
    objLoader.load('tree-05.obj', function(object) {
      object.scale.set(0.05, 0.05, 0.05);
      object.position.set( 6, 0.5, 0 );
      scene.add(object);  
      });
     });
  </script>
 <a-obj-model src="#lion-cub-obj" mtl="#lion-cub-mtl" scale="0.25 0.25 0.25" rotation="0 -180 0" position=" 0 1 0"></a-obj-model>
<a-sky src="#my-image" position="0 -200 0"></a-sky>

1 个答案:

答案 0 :(得分:0)

您没有在<script>标签中定义场景,您需要通过以下方式进行参考:

  1. document.querySelector('a-scene').object3D;引用或

  2. 在任何this.el.sceneEl.object3D上为其引用<a-entity>似乎返回a-scene参考,在您的情况下:document.querySelector('a-plane').sceneEl.object3D;

  3. 顺便提一下<script>标记时,范围就是窗口,而不是<a-obj-model>。我的建议是创建一个组件:

    AFRAME.registerComponent('myloader', {
        init: function(){
        var self = this;
        var mtlLoader = new THREE.MTLLoader();
        mtlLoader.setPath('./');
        mtlLoader.load('tree-05.mtl', function(materials) {
        materials.preload();
        var objLoader = new THREE.OBJLoader();
        objLoader.setMaterials(materials);
        objLoader.setPath('./');
        objLoader.load('tree-05.obj', function(object) {
          object.scale.set(0.05, 0.05, 0.05);
          object.position.set( 6, 0.5, 0 );
          self.el.sceneEl.object3D.add(object);  
    }
    });
    

    然后按如下方式添加:<a-obj-model myloader (...)
    它不是最好的组件,因为您需要定义更新和删除功能,我仍然会这样做。