three.js使用按钮更改.obj文件的材料

时间:2016-03-10 20:56:29

标签: javascript three.js

我在使用three.js创建按钮以将.obj的.mtl文件更改为另一个.mtl时遇到问题。关于如何做到这一点的任何想法都会很棒!

这是原始代码,改编自threejs.org上的objmtl loader示例。到目前为止,我只能使用按钮使obj​​可见/不可见,但我喜欢添加更多按钮来更改.mtl文件以反映.mtls与其他颜色和属性。< / p>

var mtlLoader = new THREE.MTLLoader();
                mtlLoader.setBaseUrl( 'examples/obj/male02/' );
                mtlLoader.setPath( 'examples/obj/male02/' );
                mtlLoader.load( 'male02_dds.mtl', function( materials ) {

                    materials.preload();

                    var objLoader = new THREE.OBJLoader();
                    objLoader.setMaterials( materials );
                    objLoader.setPath( 'examples/obj/male02/' );
                    objLoader.load( 'male02.obj', function ( object ) {


                        object.position.y = - 95;
                        dude = object;
                        scene.add( dude );

    info.innerHTML += '<br/><br/><input id=pants2 type="button" onclick="dude.visible = false" value="Dude: OFF"/>';
    info.innerHTML += '<input id=pants2 type="button" onclick="dude.visible = true" value="Dude: ON"/>';

1 个答案:

答案 0 :(得分:0)

如果你可以在没有.mtl文件的情况下工作,你可以使用类似的东西:

texture = new THREE.TextureLoader().load('dir/to/texture.jpg');
sectexture =  new THREE.TextureLoader().load('dir/to/second_texture.jpg');
lambert = new THREE.MeshLambertMaterial({color: 0xffffff, map: texture});
objLoader = new THREE.OBJLoader();
objLoader.setPath( 'examples/obj/male02/' );
objLoader.load( 'male02.obj', function ( object ) {
    object.traverse(function(child) {
        if (child instanceof THREE.Mesh){
            child.material = lambert;
        }
    });
    scene.add( object );
}, onProgress, onError );

这样,您可以将纹理加载到lambert材质中,因此如果要更改它,可以使用lambert.map = texture或lambert.map = sectexture。

[编辑]我修正了child.material的错误