Как переместить модель GLTF в ThreeJS? - PullRequest
2 голосов
/ 20 апреля 2019

Как двигать модель gltf в три раза независимо от заданной сцены?

В своем коде я обновил модель gltf и попытался переместить ее с помощью KeyboardState.js. Используемый элемент управления - OrbitControl.js.

KeyboardState.js: https://searchcode.com/codesearch/view/69477532/

Я использую функцию загрузки:

function loadGLTF(x,y,z,mesh,url){
            var loader = new THREE.GLTFLoader();
                // model
                loader.load(
                        // resource URL
                        url,
                        // called when the resource is loaded
                        function ( gltf ) {

                            mesh = gltf.scene;
                            mesh.position.set(x,y,z);
                            scene.add(mesh);
                        },
                        // called while loading is progressing
                        function ( xhr ) {

                            console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );

                        },
                        // called when loading has errors
                        function ( error ) {
                            console.log(error);
                            console.log( 'An error happened' );

                        }
                    );

        }

Это функция обновления, которую я использую для ввода с клавиатуры:

function update()
        {
            keyboard.update();

            var moveDistance = 50 * clock.getDelta(); 

            if ( keyboard.down("W") ) 
                mesh.translateY( moveDistance );

            if ( keyboard.down("S") ) 
                mesh.translateY(   -moveDistance );

            if ( keyboard.down("A") ){
                console.log("entered in A");
                mesh.translateX( -moveDistance );
            }

            if ( keyboard.down("D") ){
                console.log("entered in D");
                mesh.translateX(  moveDistance );
            }


            controls.update();
            stats.update();
        }

Но на самом деле происходит то, что объект движется по всей сцене, а не независимо от этого. Если я использую тот же код для перемещения, например, сферы, она работает. Зачем? Может быть, файл gltf внутри неявно зависит от сцены, а не простая THREE.SphereGeometry?

1 Ответ

1 голос
/ 21 апреля 2019

Кажется, вы не используете KeyboardState правильно. Идея состоит в том, чтобы использовать метод pressed(), чтобы проверить, нажата ли определенная клавиша. На следующем примере вы также можете видеть, что переводится только модель glTF, а не вся сцена (поскольку вспомогательный элемент осей остается в центре).

https://jsfiddle.net/kd41ejua/1/

...