Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t将ThreeJS网格添加到范围外的场景-THREE.Object3D.add:对象不是实例_Javascript_Three.js_Orbital Mechanics - Fatal编程技术网

Javascript Can';t将ThreeJS网格添加到范围外的场景-THREE.Object3D.add:对象不是实例

Javascript Can';t将ThreeJS网格添加到范围外的场景-THREE.Object3D.add:对象不是实例,javascript,three.js,orbital-mechanics,Javascript,Three.js,Orbital Mechanics,我刚刚开始在STLLoader、OrbitalControl和TransformControls模块中使用ThreeJS 当我将网格添加到STLLoader函数范围内的场景中时,它会按预期工作。但是,当尝试将其添加到范围之外时,会抛出错误THREE.Object3D.add:object不是实例 mesh变量是全局声明的,因此在加载程序范围之外不能使用它是没有意义的。不知道我做错了什么,但如果有任何帮助,我将不胜感激 var renderer, scene, camera, mesh, orbi

我刚刚开始在STLLoader、OrbitalControl和TransformControls模块中使用ThreeJS

当我将网格添加到STLLoader函数范围内的场景中时,它会按预期工作。但是,当尝试将其添加到范围之外时,会抛出错误THREE.Object3D.add:object不是实例

mesh变量是全局声明的,因此在加载程序范围之外不能使用它是没有意义的。不知道我做错了什么,但如果有任何帮助,我将不胜感激

var renderer, scene, camera, mesh, orbit, control;

                // mesh
                var loader = new THREE.STLLoader();

                loader.load( 'benchy.stl', function ( geometry ) {

                    var material = new THREE.MeshPhongMaterial( { color: 0x4eacc2, specular: 0x111111, shininess: 200 } );

                    mesh = new THREE.Mesh( geometry, material );
                    mesh.position.set( 0, 0, 0);
                    mesh.rotation.set( - Math.PI / 2, 0, 0 );
                    mesh.scale.set( 2, 2, 2 );

                    //scene.add( mesh );
                });

                //controls
                orbit = new THREE.OrbitControls( camera, renderer.domElement );
                orbit.update();
                orbit.addEventListener( 'change', render );

                control = new THREE.TransformControls( camera, renderer.domElement );
                control.addEventListener( 'change', render );
                control.addEventListener( 'dragging-changed', function ( event ) {
                    orbit.enabled = ! event.value;
                } );

                scene.add( mesh );
                control.attach( mesh );
                scene.add( control );
STLLoader.load()
异步工作。即使全局声明变量
mesh
,当
scene.add(mesh)时,它仍然是
undefined
在代码中执行。因此,将
mesh
添加到
onLoad()
回调中的场景图中是最健壮(也是最简单)的解决方案


<>代码> 3J.R108< /代码>

请注意,标签是C++标准模板库的,谢谢大家的注意,完全忽略了标签的描述。谢谢,现在已经完全有意义了。目前,我只在init()函数中包含所有代码,如几个示例所示。把它移到onLoad()会更好吗?TBH,这要看情况而定。如果只加载一个模型,可以在
onLoad()
中调用
init()
例程。如果加载更多内容,最好在
init()
中触发加载请求,并通过管理加载过程。