Javascript Three.js JSONLoader';onLoad不是一个函数';

Javascript Three.js JSONLoader';onLoad不是一个函数';,javascript,three.js,Javascript,Three.js,我试图用Three.js设置一个非常简单的场景,显示导入的网格旋转。我结合了Three.js文档中的几个示例,得出了以下代码: var scene, camera, renderer; var geometry, material, mesh; init(); animate(); function init(){ scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera(75, window.inner

我试图用Three.js设置一个非常简单的场景,显示导入的网格旋转。我结合了Three.js文档中的几个示例,得出了以下代码:

var scene, camera, renderer;
var geometry, material, mesh;

init();
animate();

function init(){
    scene = new THREE.Scene();

    camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.z = 1000;

    // geometry = new THREE.BoxGeometry(200, 200, 200);
    var jsonLoader = new THREE.JSONLoader();
    jsonLoader.load('handgun.js', object_to_scene(geometry, material));
}

function object_to_scene(geometry, material){
    material = new THREE.MeshBasicMaterial({
        color: 0xff0000,
        wireframe: true
    });

    mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);

    renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);

    document.body.appendChild(renderer.domElement);
}

function animate(){
    requestAnimationFrame(animate);
    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.02;

    renderer.render(scene, camera);
}
您可以看到上面注释掉的原始示例,其中我们使用Three.js生成了一个框。效果很好。但是,导入自定义三维模型的JSON文件不起作用。检查我的控制台会发现以下错误:

TypeError: onLoad is not a function                three.js:18294:4
    THREE.JSONLoader.prototype.load/<()            three.js:18294
    THREE.XHRLoader.prototype.load/<()             three.js:18010
TypeError:onLoad不是函数三。js:18294:4
三个.JSONLoader.prototype.load/而不是

jsonLoader.load( 'handgun.js', object_to_scene( geometry, material ) );
您需要这样做:

jsonLoader.load( 'handgun.js', object_to_scene );
对象到场景(几何体、材质)
是一个函数调用,在您的例子中,它返回
未定义的


three.js r.75

谢谢!我不确定该错误是如何级联到Three.js的,这给了我最终遇到的TypeError,但它似乎已经修复了它(对代码进行了一些其他更改)。然后我建议您花点时间来理解它。我向你解释了原因。完全不必要的尖刻评论放在一边,不,你没有。你给了我一个解决方案-我很感激-但我没有立即看到一个明显的解释,为什么这里的未定义函数会导致Three.js中的一个预先存在的函数未定义,我也不清楚为什么在函数中传递参数会导致它未定义。但是,说清楚一点,我不是,也不是,要求你向我解释。我知道这不是问题的关键。对不起,我不是那个句子的意思。你是对的,这可以解释为非常粗鲁。我道歉。我应该写下,“我认为如果你花时间去理解错误,那将是一个好主意”。。。错误的原因是第二个参数需要指向函数的指针。相反,您调用了该函数,将全局变量
几何体
,以及
位置
传入该函数。这是一个Javascript问题;不是three.js的问题。我也为我的强烈反应道歉-我已经开始期待在这一点上来自SO的尖刻。感谢您的澄清,感谢您的解释,现在它非常有意义!