Применение CanvasTexture в качестве карты к импортированной модели .obj - PullRequest
1 голос
/ 18 марта 2020

У меня есть файл .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 Ответ

1 голос
/ 18 марта 2020

Ваш OBJ файл не содержит текстурных координат. Следовательно, невозможно применить текстуру так, как вы ищете.

Так как вы работаете с Blender, нужно просто написать подходящие текстурные координаты. Кроме того, я настоятельно рекомендую вам экспортировать вашу модель в более современный формат glTF вместо OBJ. glTF - рекомендуемый формат 3D three.js.

...