Javascript 从canvas元素本地获取three.js场景进行操作

Javascript 从canvas元素本地获取three.js场景进行操作,javascript,html,canvas,scope,three.js,Javascript,Html,Canvas,Scope,Three.js,是否需要全局保留三个.js变量(场景、摄影机、渲染器等) 我创建了一个初始化画布元素的函数,获取DOM位置和其他信息来构建场景。然后,该函数传递给一个render函数,该函数调用自身,这意味着我永远不会丢失变量 我面临的问题是,当我想要操纵场景时,我无法访问这些变量,除非我将它们全局化。当前是否有任何方法可以仅使用画布元素ID访问和操纵场景?我正在查看canvas.getContext()函数,但找不到一种方法来获取所需的内容 我一直避免使用全局变量,因为我知道这通常是不好的做法,但无论如何,这

是否需要全局保留三个.js变量(场景、摄影机、渲染器等)

我创建了一个初始化画布元素的函数,获取DOM位置和其他信息来构建场景。然后,该函数传递给一个render函数,该函数调用自身,这意味着我永远不会丢失变量

我面临的问题是,当我想要操纵场景时,我无法访问这些变量,除非我将它们全局化。当前是否有任何方法可以仅使用画布元素ID访问和操纵场景?我正在查看canvas.getContext()函数,但找不到一种方法来获取所需的内容

我一直避免使用全局变量,因为我知道这通常是不好的做法,但无论如何,这是最好的解决方案吗

这里有一些代码来帮助澄清我的意思

function initCanvas(domPos, items){
    var scene, camera, renderer, loader;
    scene = new THREE.Scene();
    renderer = new THREE.WebGLRenderer();
    /* canvas, camera, controls setup ... */

    domPos.appendChild(renderer.domElement);

    for (var i=0; i<items.length; i++){
        loader = new THREE.ObjectLoader();
        loader.load(items[i], function (obj){ scene.add(obj); });
    }
    render(renderer, scene, controls, camera);
}

function render(r, s, ctrl, cam){
    requestAnimationFrame(function(){ render(r, s, ctrl, cam); });
    r.render(s, cam);
    ctrl.update();
}

function manipCanvas(canvasID, item){
    // var scene = document.getElementByID(canvasID).scene;
    // var scene = document.getElementByID(canvasID).getContext().scene;
    loader = new THREE.ObjectLoader();
    loader.load(item, function (obj){ scene.add(obj); });
}
function initCanvas(domPos,items){
var场景、摄影机、渲染器、加载程序;
场景=新的三个。场景();
renderer=new THREE.WebGLRenderer();
/*画布、摄影机、控件设置*/
domPos.appendChild(renderer.domeElement);

对于(var i=0;i您可以尝试将其分配到画布:

var scene = new THREE.Scene();
document.getElementById(canvasID).scene=scene;
但我认为在一个简单的页面中使用全局变量是可以的