代码之家  ›  专栏  ›  技术社区  ›  Brother Eye

three.js-尽管加载了材料,但显示空白(黑色)纹理的模型

  •  0
  • Brother Eye  · 技术社区  · 7 年前

    我有一个三维模型文件 3dbaotang.obj 还有一份材料档案 3dbaotang.mtl . 我已经用 three.js

    这是我的密码:

    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth / 
    window.innerHeight, 0.1, 10000);
    var renderer = new THREE.WebGLRenderer({
        antialias: true
    });
    var controls = new THREE.OrbitControls(camera, renderer.domElement);
    var keyLight = new THREE.DirectionalLight('hsl(30, 100%, 75%)', 1.0);
    var fillLight = new THREE.DirectionalLight('hsl(240, 100%, 75%)', 0.75);
    var backLight = new THREE.DirectionalLight(0xffffff, 1.0);
    backLight.position.set(100, 0, -100).normalize();
    keyLight.position.set(-100, 0, 100);
    fillLight.position.set(100, 0, 100);
    
    controls.enableDamping = true;
    controls.dampingFactor = 0.25;
    controls.enableZoom = true;
    controls.update();
    
    renderer.setSize(window.innerWidth, window.innerHeight, false);
    renderer.setClearColor(new THREE.Color(0xf2f2f2), 1);
    document.body.appendChild(renderer.domElement);
    
    // LOAD MODEL
    var mtlLoader = new THREE.MTLLoader();
    mtlLoader.setResourcePath('/models/');
    mtlLoader.setPath('/models/');
    mtlLoader.load('/3dbaotang.mtl', (materials) => {
        materials.preload();
    
        var objLoader = new THREE.OBJLoader();
        objLoader.setMaterials(materials);
        objLoader.setPath('/models/');
        objLoader.load('3dbaotang.obj', (object) => {
            scene.add(object);
        });
    });
    
    camera.position.z = 200;
    
    function animate() {
        requestAnimationFrame(animate);
        renderer.render(scene, camera);
    }
    
    animate();
    

    result

    1 回复  |  直到 7 年前
        1
  •  1
  •   Brother Eye    7 年前

    造成这个问题的是光线不足,而不是材料。添加后 ambient light 对于场景,可以正常看到对象

        2
  •  1
  •   Matt Scott    7 年前

    再加上眼睛哥哥的回答,我是全新的,花了相当多的时间在黑暗中,但这让我对解决方案,所以我想我会详细说明任何人在同一位置。

    添加灯光可以简单地如下所示;

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

    参考文件位于 https://threejs.org/docs/#api/en/lights/AmbientLight