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