Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js凹凸贴图未更新_Javascript_Three.js_Bump Mapping - Fatal编程技术网

Javascript Three.js凹凸贴图未更新

Javascript Three.js凹凸贴图未更新,javascript,three.js,bump-mapping,Javascript,Three.js,Bump Mapping,我有一个.obj模型,在我的场景中加载了相应的.mtl文件。加载后,我正在对其应用bumpMap: var mtlLoader = new THREE.MTLLoader(); mtlLoader.setPath('/models/'); mtlLoader.load('model.mtl', function (materials) { materials.preload(); // Load o

我有一个
.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
,它就不会被应用。例如,使用此代码时,
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凹凸贴图后,代码>不会改变任何内容。

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

mesh.material.needsUpdate = true;
请参阅three.js文档

3.js r.85