Проблемы с текстурой, использующей MTLLoader of three.js

#three.js #loader

#three.js #загрузчик

Вопрос:

Я использую MTLloader из three.js библиотека, и я не знаю, почему, но текстура не загружается. Сетка становится полностью белой.

Однако, если я использую OBJ-файл, предоставленный примерами three.js библиотека, объект загружен со своей текстурой правильно.

Есть идеи?

Я публикую код:

 function loadObj(urlObj, urlObjMtl, urlHairCompl){

        var container, stats;
        var camera, scene, renderer;

        var mouseX = 0, mouseY = 0;
        var windowHalfX = window.innerWidth / 2;
        var windowHalfY = window.innerHeight / 2;

        init();
        animate();

        function init() {

                camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
                camera.position.z = 100;

                controls = new THREE.TrackballControls( camera );

                controls.rotateSpeed = 2.0;
                controls.zoomSpeed = 4;
                controls.panSpeed = 2;

                controls.noZoom = false;
                controls.noPan = false;

                controls.staticMoving = false;
                controls.dynamicDampingFactor = 0.3;
                // scene
                scene = new THREE.Scene();
                var ambient = new THREE.AmbientLight( 0x444444 );
                scene.add( ambient );

                var directionalLight = new THREE.DirectionalLight( 0xffeedd );
                directionalLight.position.set( 0, 0, 1 ).normalize();
                scene.add( directionalLight );

                // model
                var loader = new THREE.OBJMTLLoader();
                if (urlObj !== null){
                    loader.load( urlObj, urlObjMtl, function ( object ) {

                            object.position.y = 0;
                            object.position.z = -10;
                            scene.add( object );
                    } );
                }


                var display = document.getElementById('display') ;
                renderer = new THREE.WebGLRenderer( { canvas: display } );


               // window.addEventListener( 'resize', onWindowResize, false );
        }

        function onWindowResize() {
                windowHalfX = window.innerWidth / 2;
                windowHalfY = window.innerHeight / 2;

                camera.aspect = window.innerWidth / window.innerHeight;
                camera.updateProjectionMatrix();
                renderer.setSize( window.innerWidth, window.innerHeight );
                controls.handleResize();
        }


        function animate() {
                //requestAnimationFrame( animate );
                //render();

            requestAnimationFrame( animate );
            controls.update();
            renderer.render( scene, camera );

        }

        function render() {

                camera.position.x  = ( mouseX - camera.position.x ) * .05;
                camera.position.y  = ( - mouseY - camera.position.y ) * .05;

                camera.lookAt( scene.position );
                renderer.render( scene, camera );
        }
}
  

Большое спасибо

Комментарии:

1. Вы не даете никаких указаний на то, что такое urlObj или urlObjMtl. Также как насчет их содержимого.

Ответ №1:

Откройте в текстовом редакторе ваш файл .obj и найдите в нем ссылку на строку -nan . Замените -nan значение на 0.000000 . Иногда .obj-файл получает -nan при экспорте, а затем при отображении текстур происходит сбой в three.js .

Пример:

 vn -nan -nan -nan" should be "vn 0.000000 0.000000 0.000000
  

Это был мой случай. С -nan он будет загружаться с помощью OBJLoader, но при добавлении .mtl [OBJMTLLoader] произошел сбой. Итак, исправлением для меня была замена -nan на 0.000000 .