将CanvasTexture作为映射应用于导入的.obj模型

时间:2020-03-18 14:32:22

标签: javascript canvas three.js

我有一个要导入的.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

1 个答案:

答案 0 :(得分:1)

您的OBJ文件不包含任何纹理坐标。因此,无法按照您想要的方式应用纹理。

由于您正在使用Blender,因此编写合适的纹理坐标应该很简单。此外,我强烈建议您将模型导出为更现代的glTF格式,而不是OBJglTFthree.js的3D推荐格式。