Three.js — Применение текстуры к сетке Collada дает неожиданный результат

Следуя примеру Three.js ColladaLoader, я Мы экспортировали модель банки с газировкой Cinema4D (состоящую из 4 мешей) в файл .dae. . К одному из мешей, корпусу банки, я хочу добавить текстуру.

В Cinema4D я уже сделал текстуру на основе UV-карты меша ( сферический). Однако, когда я пытаюсь применить текстуру к сетке, она просто показывает сплошную белую заливку. Я добавил весь код в этот Codepen. Соответствующий код ниже, отредактированный для краткости:

loader = new THREE.ColladaLoader();
loader.load('can.dae', function (collada) {
    can = collada.scene;

    can.traverse(function (node) {
        var textureLoader

        if (node.name == 'wrapper') {
            textureLoader = new THREE.TextureLoader();

            textureLoader.load('wrapper.png', function (texture) {
                node.material = new THREE.MeshBasicMaterial({
                    map: texture
                });

                node.material.needsUpdate = true;
            });
        }
    });

    scene.add(can); 
});

Иллюстрация результата. Как видите, обертка банки не красная wrapper.png при условии, но сплошная белая заливка. Я пытался экспериментировать с режимами отображения и переноса, но безрезультатно. Любая помощь очень ценится!

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

К вашему сведению: я уже исключил проблемы с CORS.


person oscaralexander    schedule 07.10.2018    source источник
comment
Вы сделали console.logs, чтобы убедиться, что ваш код вызывается? Трудно отлаживать подобные вещи без примера.   -  person manthrax    schedule 07.10.2018
comment
Попробуйте загрузить текстуру перед загрузкой объекта, а затем сопоставьте ее.   -  person corashina    schedule 07.10.2018
comment
Можете ли вы опубликовать актив + текстуры, и мы сможем посмотреть?   -  person manthrax    schedule 08.10.2018
comment
NVM увидел ваш codepen. Нашел то, что я считаю проблемой, и ответил ниже.   -  person manthrax    schedule 08.10.2018


Ответы (1)


Я добавил куб в ваш загрузчик и дал ему этот материал, и это сработало. Таким образом, подразумевается, что ваша сетка банки не имеет назначенных ей правильных координат UV. Возможно, он использует автоматическое цилиндрическое отображение в вашем программном обеспечении для разработки, которое не экспортирует свои УФ? В какой программе вы пишете?

            scene.add(new THREE.Mesh(new THREE.BoxGeometry(1,1,1),node.material));

https://codepen.io/manthrax/pen/ePBZbZ?editors=1001

person manthrax    schedule 07.10.2018
comment
Спасибо! Модель создана в Cinema4D. Меш имеет тег UVW (см. снимок экрана), но я не уверен, что это довольно? К сожалению, я очень неопытен в C4D. Я следовал руководству по созданию UV-карты и именно так создал исходную текстуру, но не могу сказать, что полностью понимаю этот процесс. - person oscaralexander; 08.10.2018