我正在尝试在运行时更改.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 );
}
我的代码是错误的还是在混合器中导出另一个纹理的技巧?
希望有人可以帮助我。谢谢。
答案 0 :(得分:2)
glTF格式使用与three.js不同的纹理约定,texture.flipY
必须设置为false
(默认为true
)。对于模型中包含的纹理,GLTFLoader会自动执行此操作。在运行时更改纹理或添加新纹理时,必须在JS代码中完成:
texture.flipY = false;
mesh.material.map = texture;