Помещение текстур в файл obj

Я хочу добавить текстуру в свой obj-файл, но получаю сообщение об ошибке. Это мой код:

    new THREE.MTLLoader()
            .setPath( 'models/cool' )
                .load( 'CobbleStones.mtl', function ( mat ) {
                    mat.preload();

            var loader = new THREE.OBJLoader( loadingManager );

            loader.load( 'models/cool.obj', function ( object ) {
                object.traverse( function ( child ) {
                    if ( child instanceof THREE.Mesh ) {
                        child.material = gemBackMaterial;
                        child.material = material;

                        loader.setMaterials(mat);

                        var second = child.clone();
                        second.material = gemFrontMaterial;
                        var parent = new THREE.Group();
                        parent.add( second );
                        parent.add( child );
                        scene.add( parent );
                        objects.push( parent );
                    }
                } );
            } );
        });

Сообщение об ошибке:

GET http://localhost/alpha/Alpha/models/coolCobbleStones.mtl 404 (Not Found)

Я был бы очень благодарен, если бы кто-нибудь помог мне с моей проблемой.

Пожалуйста, прочтите stackoverflow.com/help/mcve

pailhead 02.05.2018 19:56
gemFrontMaterial и gemBackMaterial не объявлены (возможно, возврат undefined)
pailhead 02.05.2018 19:56

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

pailhead 02.05.2018 20:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
273
1

Ответы 1

Ваш путь неправильный. Вы устанавливаете его на:

models/coolCobbleStones.mtl

Но тебе нужно

models/cool/CobbleStones.mtl

Просто добавьте / в .setPath( 'models/cool/' )

Здравствуйте, спасибо, я попробовал другой файл mtl, и ваше решение сработало, но в моем файле obj все еще нет текстуры, вы знаете, почему?

Boby 02.05.2018 19:23

Трудно сказать по вашему образцу кода. Такое ощущение, что gemBackMaterial, material и gemFrontMaterial появляются из ниоткуда. Я не знаю, где они объявляются, а параметр mat, который передается во внешнюю функцию, не назначается ни одной сетке.

Marquizzo 02.05.2018 19:38

Здравствуйте, я работаю над чем-то вроде конфигуратора, и мне нужны gemBackMaterial и gemFrontMaterial, чтобы изменить цвет файла obj во время выполнения. А мат не назначается? Я думал, что loader.setMaterials (mat) достаточно, это то, что я видел в других примерах, знаете, что я могу там улучшить?

Boby 04.05.2018 02:28

@Boby Да, похоже, вы звоните loader.setMaterials() несколько раз, поскольку он запускается в цикле object.traverse(). Я действительно не знаю, что еще вам сказать, поскольку все зависит от контекста, в котором работает ваш код, загружаемых ресурсов и т. д. Мой лучший совет - как можно точнее следовать примеру: github.com/mrdoob/three.js/blob/master/examples/… и как только вы Загрузите загрузчик и начните изменять его в соответствии со своими потребностями.

Marquizzo 04.05.2018 02:33

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