1

我有一个模型,在我的场景中加载.obj了相应的文件。加载后.mtl我正在应用它:bumpMap

        var mtlLoader = new THREE.MTLLoader();
        mtlLoader.setPath('/models/');
        mtlLoader.load('model.mtl', function (materials) {
            materials.preload();

            // Load obj file
            var objLoader = new THREE.OBJLoader();
            objLoader.setMaterials(materials);
            objLoader.setPath('/models/');
            objLoader.load('model.obj', function (group) {

                var geometry = group.children[0].geometry;
                geometry.center();

                model = new THREE.Mesh(geometry, otherMesh.material.clone());
                model.material.bumpMap = new THREE.ImageUtils.loadTexture('images/bump.png');
                model.name = "obj model";
                scene.add(model);

                render();
                callback();
            });
        });

这按预期工作。纹理只是一个map黑白.png图像。但是,如果我bumpMap在添加模型之前应用 not 就不会应用它。例如,此代码bumpMap不适用于模型:

        var mtlLoader = new THREE.MTLLoader();
        mtlLoader.setPath('/models/');
        mtlLoader.load('model.mtl', function (materials) {
            materials.preload();

            // Load obj file
            var objLoader = new THREE.OBJLoader();
            objLoader.setMaterials(materials);
            objLoader.setPath('/models/');
            objLoader.load('model.obj', function (group) {

                var geometry = group.children[0].geometry;
                geometry.center();

                model = new THREE.Mesh(geometry, otherMesh.material.clone());
                setTimeout(function(){
                    model.material.bumpMap = new THREE.ImageUtils.loadTexture('images/bump.png');
                }, 0);

                model.name = "obj model";
                scene.add(model);

                render();
                callback();
            });
        });

只需添加超时并且bumpMap不再应用。model.bumpMap.needsUpdate = true;应用后添加bumpMap不会改变任何东西。

4

1 回答 1

1

至少渲染一次材质后,添加以前不存在的纹理需要构建新的着色器程序。要强制这样做,您需要设置

mesh.material.needsUpdate = true;

请参阅three.js 文档如何更新事物

三.js r.85

于 2017-03-12T00:36:05.210 回答