我在使用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"/>';
答案 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的错误