Как применить текстуру к пользовательской геометрии в Three.js

Я успешно применил текстуру к геометрии куба с помощью этого:

var geometry = new THREE.CubeGeometry(10, 10, 10);
var meshMaterial = new THREE.MeshPhongMaterial({ transparent: false, map: THREE.ImageUtils.loadTexture('/app/images/wood.jpg') });
meshMaterial.side = THREE.DoubleSide;
var mesh = new THREE.Mesh(geometry, meshMaterial);

С этим я получаю хороший текстурированный куб как это:

введите описание изображения здесь

Теперь я хочу применить ту же текстуру (изображение 512x512 jpg) к пользовательской модели, которую я загружаю из STL, и вот что я получаю (в данном случае пирамиду):

введите описание изображения здесь

Это код:

loader.load(jsonParam.url, function (geometry) {
            var meshMaterial = new THREE.MeshPhongMaterial({ transparent: false, map: THREE.ImageUtils.loadTexture('/app/images/wood.jpg') });
            meshMaterial.side = THREE.DoubleSide;

            var mesh = new THREE.Mesh(geometry, meshMaterial);

            mesh.castShadow = false;
            mesh.receiveShadow = true;
            scene.add(mesh);
        });

Почему текстура не применяется, и я получаю только то, что кажется средним из цветов текстуры?

1 ответ

Решение

Вам нужно ультрафиолетовое картирование.
Вы можете либо отредактировать модель в программном обеспечении для моделирования, чтобы добавить UV-координаты, либо сгенерировать их, как в ответах, размещенных здесь.
Я полагаю, что другим вариантом будет создание собственного шейдера, который отображает текстуру на поверхность модели без использования UV-координат.

Другие вопросы по тегам