在运行时导入另一个纹理(带.glb格式的three.js)

时间:2018-05-04 08:02:30

标签: 3d three.js blender gltf

我正在尝试在运行时更改.glb对象的纹理。我使用的是three.js,但它不起作用。

在这个例子中,它必须工作...... http://necromanthus.com/Test/html5/sims_room.html

所以,我有这个对象: (带嵌入图像的glb导出) Shoe

现在我改变了纹理,发生了类似这样的事情: Shoe after change

我不知道我能做什么。

以下是加载.glb对象的代码:

var shoeFile = 'shoe.glb';
glbLoader.load('3d_models/' + shoeFile, function(geometry) {
  shoeObject = geometry.scene.children[0];
  scene.add(shoeObject);
}, onLoadProgress);

以下是更改纹理的代码:

var textureLoader = new THREE.TextureLoader();
var remap = textureLoader.load( "3d_models/shoe.png" );

function setAnotherTexture( texture ) {
   scene.children[5].material.map = eval( texture );
}

我的代码是错误的还是在混合器中导出另一个纹理的技巧?

希望有人可以帮助我。谢谢。

1 个答案:

答案 0 :(得分:2)

glTF格式使用与three.js不同的纹理约定,texture.flipY必须设置为false(默认为true)。对于模型中包含的纹理,GLTFLoader会自动执行此操作。在运行时更改纹理或添加新纹理时,必须在JS代码中完成:

texture.flipY = false;
mesh.material.map = texture;