【问题标题】:3d-Model loading via Three.js通过 Three.js 加载 3d 模型
【发布时间】:2020-06-21 20:27:21
【问题描述】:

我已经开始接触 Three.js 并且一直无法加载 gltf 文件。我已经设法修复了所有错误,但我的模型仍然没有出现在我的页面上。这是我的代码:

function init() {

        scene = new THREE.Scene();
        scene.background = new THREE.Color(0xffffff);

        camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

        renderer = new THREE.WebGLRenderer({antialias: true});
        renderer.setSize(window.innerWidth, window.innerHeight);

        document.body.appendChild(renderer.domElement);


        let controls = new OrbitControls(camera, renderer.domElement);

        /*
        let geometry = new THREE.BoxGeometry();
        let material = new THREE.MeshBasicMaterial( { color: 0x00ff00, wireframe: true } );
        cube = new THREE.Mesh( geometry, material );
        scene.add( cube );*/

        var loader = new GLTFLoader();

        loader.load(
            // resource URL
            'models/eevee/eevee.gltf',
            // called when the resource is loaded
            function ( gltf ) {

                let object = gltf.scene.children[0];
                object.scale.set(0.1,0.1,0.1);
                object.position.set(0, -10, -0.75);

                scene.add( object );

                renderer.render(scene, camera);

            },
            // called while loading is progressing
            function ( xhr ) {

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

            },
            // called when loading has errors
            function ( error ) {

                console.log( 'An error happened' );
                console.log(error)

            }
        );

        camera.position.z = 5;

        window.addEventListener('resize', onWindowResize);

    }

正如我所说,没有出现错误,但 3d 模型没有显示在我的页面上。

【问题讨论】:

  • 控制台有错误吗?有时加载的模型太大而超出相机的范围,或者有时太小而无法看到......
  • 如果您包含上下文数据,例如浏览器、操作系统和规格,这可能会有所帮助
  • this article 可能会提出一些想法
  • @gman 我曾尝试使用本教程,但收到错误消息“无法读取未定义的属性 'getUniforms'”。

标签: three.js 3d gltf


【解决方案1】:

它对我来说很好,我只是添加了一个环境光,设置相机位置并将“三”添加到:var loader = new THREE.GLTFLoader();

function init() {
    scene = new THREE.Scene();
    scene.background = new THREE.Color(0xffffff);

    light = new THREE.AmbientLight(0xffffff); 
    scene.add(light);

    camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 100000);
    camera.position.set(150, 180, 280);

    renderer = new THREE.WebGLRenderer({antialias: true});
    renderer.setSize(window.innerWidth, window.innerHeight);

    document.body.appendChild(renderer.domElement);

    let controls = new OrbitControls(camera, renderer.domElement);

    var loader = new THREE.GLTFLoader();

    loader.load(
        'assets/models/gltf/street_car.glb',
        function ( gltf ) {
            let object = gltf.scene.children[0];
            object.scale.set(100,100,100);
            object.position.set(0, 0, 0);
            scene.add( object );
            renderer.render(scene, camera);
        },
        function ( xhr ) {
            console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
        },
        function ( error ) {
            console.log( 'An error happened' );
            console.log(error)
        }
    );
    camera.position.z = 5;
    window.addEventListener('resize', onWindowResize);
}

init();

【讨论】:

  • 您知道问题可能是什么吗?也许是损坏的文件?此外,更改灯光颜色时,我看不到任何变化。没有加载模型时应该有区别吗?
  • 可能你的gltf文件不好。尝试在此处加载它:gltf-viewer.donmccurdy.com 如果他很好,您可以尝试在我的 three.js 场景中加载:sboez.github.io/3D-Models-Load 如果您愿意,可以启发您使用我的代码,或者只需将我的 .glb 模型加载到您的场景。对于灯光来说,只是为了确保场景是有启发性的。
  • 我尝试在此处加载我的模型:sboez.github.io/3D-Models-Load 并且成功了,但是我的模型是黑色的并且没有照明。在这个网站上:gltf-viewer.donmccurdy.com 我的模型正确加载并且我能够看到它。这一次是白色的,灯光也能正常工作。
  • 是的,这很正常。我没有在我的工作中管理 gltf 模型的材料。所以,你的模型没问题 :) 你用你的代码看到了吗?如果没有,请尝试使用大数字重新调整模型。在我的仓库中,gltf 文件是:object.scale.set(100,100,100);
  • 我尝试将其缩放到 0.1 和 100,没有任何变化。当我在 Blender 中打开它时,模型非常大。你有什么想法还有什么问题吗?
猜你喜欢
  • 2017-01-28
  • 2021-12-15
  • 1970-01-01
  • 2021-07-20
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2020-05-17
相关资源
最近更新 更多