【问题标题】:Three.ImageLoader - Object [object Object] has no method 'addEventListener'三.ImageLoader - Object [object Object] 没有方法'addEventListener'
【发布时间】:2014-09-10 05:01:09
【问题描述】:

我正在使用 three.js 开发一个简单的模型预览器,用户可以在其中动态上传和更改模型材质的纹理等。

在我的一生中,我无法克服这个错误,并且对于应该具有 addEventListener 方法的 three.js 中的其他加载器,我遇到了这个问题。那么我做错了什么?我正在使用 r59

function loadTex(tex)
{
    var texture = new THREE.Texture();

    var imgloader = new THREE.ImageLoader( manager );

    imgloader.addEventListener('load', function(event) {
        // Event stuff
    });

    imgloader.load( tex );
}

图片成功上传到服务器后调用该函数。我要做的就是改变已经存在的材质的纹理。

【问题讨论】:

  • 您最近是否更新了 Three.js 并且之前可以正常工作?对于 OBJLoader 和其他外部加载器,您还需要更新这些文件。对于 ImageLoader 我不太确定,但你也可以只使用 Three.ImageUtils.loadTexture();
  • @GuyGood,感谢您的回复。我之前没有使用过 ImageLoader,所以不能说它是否适用于以前的版本。我改用 ImageUtils.loadTexture() 并且效果很好。谢谢!
  • 顺便说一句,我仍然想知道为什么原始代码不起作用。以后我可能需要 .addEventListener 方法,所以我可能会在使用各种three.js 函数时再次遇到这个问题。一个明确的答案无疑会对其他入门级用户有所帮助。

标签: three.js


【解决方案1】:

当我从 r58 升级到 r59 时,我遇到了同样的问题。看起来 addEventListener 方法在 r59 中不可用 (https://github.com/mrdoob/three.js/blob/master/src/extras/ImageUtils.js)

您可以使用 loadTexture 方法并监听 onLoad 和 onError 事件

function onLoad(event) {
// do something
}

function onError(event) {
// do something
}

texture = THREE.ImageUtils.loadTexture(url,mapping,onLoad,onError)

您可以传递 {} 进行映射或使用此处定义的任何值

http://threejs.org/docs/59/#Reference/Textures/Texture

【讨论】:

  • 一定有更好的办法。我在 OBJloader 上遇到了同样的问题,最后只使用了较旧的库。
【解决方案2】:
var imgloader = new THREE.ImageLoader( manager );
imgloader.load(tex, function(event) {
    // Event stuff
});

【讨论】:

  • 请解释 OP 的代码有什么问题以及如何解决问题通过编辑您的答案
猜你喜欢
  • 2014-08-09
  • 1970-01-01
  • 2016-01-03
  • 2015-06-09
  • 2013-10-18
  • 1970-01-01
  • 2015-09-22
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多