Uncaught ReferenceError: модель не определена - PullRequest
1 голос
/ 28 марта 2020

Я очень новичок в JavaScript, так что, насколько я знаю, вы все могли бы сильно сжаться в том, что мой код. По сути, я пытаюсь определить модель, импортированную с помощью загрузчика Three. js GTLF, и определить ее как «модель», чтобы я мог автоматически поворачивать ее.

Моя терминология, вероятно, далека от нормы, но это единственный способ, которым я знаю, как объяснить, что я делаю и что нужно исправить.

Я просто скомпоную весь код, но здесь очевидна ошибка:

                        var model
                        var modelLoader = new GLTFLoader().setPath( 'models/DamagedHelmet/' );
                        modelLoader.load( 'DamagedHelmet.gltf', function ( gltf ) {

                            model = gltf.scene;
                            gltf.scene.traverse( function ( child ) {

                                if ( child.isMesh ) {

                                    roughnessMipmapper.generateMipmaps( child.material );

                                }

                            } );

                            scene.add(model);

                            roughnessMipmapper.dispose();

                            render();

                        } );

Я определил объект только как модель , поэтому объект будет автоматически непрерывно вращаться, и я попытался сделать это здесь, несколько строк кода ниже:

                function render() {

            renderer.render( scene, camera );

                model.rotation.x += 0.01;
                model.rotation.y += 0.005;

            }

Вероятно, есть что-то действительно очевидное, что я пропускаю или делаю неправильно. Кажется, что все решения, которые я нашел в сети, работают, только если Javascript не импортирован через модуль. (по крайней мере это мое предположение)

Приветствия, ребята.

1 Ответ

0 голосов
/ 28 марта 2020

Gltf - это боль, но для вашей проблемы, в зависимости от того, используете ли вы узел или локальный скрипт, обязательно добавьте (для узла):

import { GLTFLoader } from '../../node_modules/three/examples/jsm/loaders/GLTFLoader.js';

, чтобы добавить GLTFLoader в ваш проект.

Как только вы это сделаете, вы можете попытаться не пересекать политику CORS, которая гарантирует, что вы разрешаете в своем заголовке тот же источник, если вы используете express, это дает вам что-то вроде:

app.get('/', (req, res, next) =>{
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next()
  });

source

И затем вы должны убедиться, что все эти файлы:

"buffers" : [
    {
        "byteLength" : 558504,
        "uri" : "DamagedHelmet.bin"
    }
],
"images" : [
    {
        "uri" : "Default_albedo.jpg"
    },
    {
        "uri" : "Default_metalRoughness.jpg"
    },
    {
        "uri" : "Default_emissive.jpg"
    },
    {
        "uri" : "Default_AO.jpg"
    },
    {
        "uri" : "Default_normal.jpg"
    }
],

, перечисленные в DamagedHelmet, также доступны и не нарушайте политику CORS, тогда вы можете использовать свой код, который мне кажется правильным

...