Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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 为什么我不能在three.js中缩放或设置网格的位置?_Javascript_Three.js - Fatal编程技术网

Javascript 为什么我不能在three.js中缩放或设置网格的位置?

Javascript 为什么我不能在three.js中缩放或设置网格的位置?,javascript,three.js,Javascript,Three.js,正如您在下面看到的,我在场景中添加了一个网格,但每次尝试缩放它或设置位置时,我都会得到一个错误,即网格为空 mesh2.position.set(0,0,-5); mesh2.scale.set(0.2, 0.3, 0.2); 未捕获的TypeError:无法读取null的属性“位置” 查看 请帮帮我,因为我已经浪费了好几个小时试图让它工作 function init() { var scene = new THREE.Scene();//CREATE NEW THREE JS

正如您在下面看到的,我在场景中添加了一个网格,但每次尝试缩放它或设置位置时,我都会得到一个错误,即网格为空

  mesh2.position.set(0,0,-5);
  mesh2.scale.set(0.2, 0.3, 0.2);
未捕获的TypeError:无法读取null的属性“位置”

查看

请帮帮我,因为我已经浪费了好几个小时试图让它工作

function init()
{
    var scene = new THREE.Scene();//CREATE NEW THREE JS SCENE

    var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
    var renderer = new THREE.WebGLRenderer({antialias:true}); //INIT NEW THREE JS RENDERER
        renderer.setPixelRatio( window.devicePixelRatio ); //SET PIXEL RATIO FOR MOBILE DEVICES
        renderer.setClearColor(new THREE.Color('#005b96'), 1) //SET BG COLOR
        renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); // SET SIZE
        document.body.appendChild( renderer.domElement ); //APPLY CANVAS TO BODY
        renderer.domElement.id = "canvas_threeJS";//ADD ID TO CANVAS

    //ADD CAMERA TO THE SCENE
    var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR =1000;
    var camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
        camera.position.set(0,3,8); //SET CAMERA POSITION
        camera.lookAt(new THREE.Vector3(0,0,-5));
        scene.add(camera);

    //ADD AMBIENT LIGHT
    var ambientLight = new THREE.AmbientLight("#6497b1");
        scene.add(ambientLight);

    //HANDLE WINDOW RESIZE
    //ADD MAIN LIGHT
    var light = new THREE.PointLight("#b3cde0",.6);
        light.position.set(-5,13,-1);
        scene.add(light);


    var mesh2 = null;
    var loader = new THREE.JSONLoader();
    loader.load('assets/models/spaceship001.json', function(geometry) {
        mesh2 = new THREE.Mesh(geometry);
        scene.add(mesh2);
        console.log("done loading model");
        });


      mesh2.position.set(0,0,-5);
//    mesh2.scale.set(0.2, 0.3, 0.2);


    //START POSITION OF A LEVEL GROUP
    var levelSpawn = -100;

    //GET VISIBLE WIDTH AT levelSpawn POSITION
    var vFOV = camera.fov * Math.PI / 180; // convert vertical fov to radians
    var height = 2 * Math.tan( vFOV / 2 )*levelSpawn; // visible height

    var aspect = window.innerWidth / window.innerHeight;
    var width = height * aspect;// visible width

    //START RENDER
    update();

    function update()
    {

        //UPDATE 3D SCENE
        renderer.render( scene, camera );

        //KEEP RENDERING
        requestAnimationFrame( update );
    }


}

问题在于javascript是一种异步语言。根据你的背景,你应该仔细阅读。尝试将
console.log(“设置比例和位置”)
放在这两行的正下方或上方。您会注意到,在加载网格之前,位置和比例设置为

您需要做的是在传递给加载函数的回调函数中设置位置和比例,就在
console.log(“done loading model”)下面


您还可以阅读javascript承诺,以便更好地理解它。

问题在于javascript是一种异步语言。根据你的背景,你应该仔细阅读。尝试将
console.log(“设置比例和位置”)
放在这两行的正下方或上方。您会注意到,在加载网格之前,位置和比例设置为

您需要做的是在传递给加载函数的回调函数中设置位置和比例,就在
console.log(“done loading model”)下面


您还可以阅读javascript承诺以更好地理解它。

加载模型是异步的。您的代码在加载模型之前执行,请将其放在回调中。加载模型是异步的。在加载模型之前执行代码,请将其放在回调中。