首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用`Entity.setObject3D`时使用的对象不是THREE.Object3D的实例。

调用`Entity.setObject3D`时使用的对象不是THREE.Object3D的实例。
EN

Stack Overflow用户
提问于 2022-06-20 07:56:15
回答 2查看 79关注 0票数 0

当我使用draco在AFRAME.registerComponent中的aframe中显示glf模型(在搅拌器中压缩)时,我得到了一个错误“对象不是AFRAME.registerComponent的实例”

我之所以重写gltf模型,是因为我正在sveltekit中开发我的项目,以避免服务器端呈现,提前感谢。

代码语言:javascript
复制
<a-scene>
        <a-entity id="el_model" comp-gltf-model="url(https://t9omiq.csb.app/tree_compressed.glb)" scale="0.028 0.028 0.028" position="-2 -1 -5"></a-entity>
</a-scene>

JS文件

代码语言:javascript
复制
AFRAME.registerComponent("comp-gltf-model", {
  schema: { type: 'model' },
  init: function() { 

     const  loader = new GLTFLoader().setCrossOrigin('anonymous')
              .setDRACOLoader(new DRACOLoader().setDecoderPath('https://www.gstatic.com/draco/v1/decoders/'))
             //  .setKTX2Loader(new KTX2Loader().detectSupport(renderer));
     
     let src = this.data;
     let self = this;
     let el = this.el;
     
   // Loading glf 
   loader.load(src, function gltfLoaded (gltfModel) {
     self.model = gltfModel.scene || gltfModel.scenes[0];

     console.log("self.model", self.model)
     
     var modelObj = self.model.modelObj;
     el.setObject3D('mesh', modelObj);
   // el.emit('model-loaded', {format: 'gltf', model: self.model});
   }, undefined /* onProgress */, function gltfFailed (error) {
     var message = (error && error.message) ? error.message : 'Failed to load glTF model';
     // warn(message);
     // el.emit('model-error', {format: 'gltf', src: src});
   });
   
  },
  update: function() { 
    
  }
})

console.log("self.model",self.model)

代码语言:javascript
复制
Object { uuid: "D93E28D5-311A-4D92-978C-2132D9ECDB86", name: "tree", type: "Group", parent: null, children: (2) […], up: {…}, position: {…}, rotation: {…}, quaternion: {…}, scale: {…}, … }


message: `Entity.setObject3D` was called with an object that was not an instance of THREE.Object3D.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-27 09:22:50

问题解决了。首先,我将模型添加到新的THREE.Object3D()中,但是,我发现了另一个错误"Uncaught : material.onBeforeRender不是一个函数“,这是由于three.js版本不同。。。现在一切都好

票数 0
EN

Stack Overflow用户

发布于 2022-06-24 19:52:44

A帧gltf模型中的等效码是:

代码语言:javascript
复制
        self.model = gltfModel.scene || gltfModel.scenes[0];
        el.setObject3D('mesh', self.model);

从这一行(以及控制台输出)可以看出,self.model是一个Object3D:

代码语言:javascript
复制
console.log("self.model", self.model)

据我所知,Object3D没有属性modelObj,因此self.model.modelObj将是未定义的。

我认为你只需要替换这句话:

代码语言:javascript
复制
var modelObj = self.model.modelObj;

在这方面:

代码语言:javascript
复制
var modelObj = self.model;

你的代码很可能会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72683852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档