我有一个要导入的.obj文件,如下所示:
OBJLoader.load('/models/model.obj', m => {
let model = m.children[0];
model.material = new THREE.MeshBasicMaterial();
scene.add(model);
});
我使用THREE.MeshBasicMaterial覆盖默认材质,因此可以分别编辑地图。
稍后,我得到一个CanvasTexture并将其用作地图:
let texture = new CanvasTexture(canvas);
model.material.map = texture;
model.material.needsUpdate = true;
这似乎可行,但是我无法在场景中的对象上正确看到纹理-看起来非常“缩放”-仅显示纹理的整体颜色,没有任何细节。我玩过texture.repeat
,但似乎无法得到我想要的东西,即:
纹理应出现在对象上并缩放以填充对象。我在Blender中制作了对象,它有很多面,但是我希望纹理将所有对象填充到整个面上,而无需重复。
我该如何实现?
编辑:这是我正在使用的模型https://drive.google.com/drive/folders/1y6NmxNpamCtWsiBPlDhndnvQbxYPVgB7?usp=sharing
答案 0 :(得分:1)
您的OBJ
文件不包含任何纹理坐标。因此,无法按照您想要的方式应用纹理。
由于您正在使用Blender,因此编写合适的纹理坐标应该很简单。此外,我强烈建议您将模型导出为更现代的glTF
格式,而不是OBJ
。 glTF
是three.js
的3D推荐格式。