Three.js- Как я могу изменить текстуру в файле collada в three.js?

У меня есть файл collada, который был экспортирован из Maya, и я хочу изменить его текстуру в three.js. После экспорта файла Maya в загрузчик для three.js текстура не появляется. Я подумал, что могу попытаться отобразить текстуру вручную с помощью three.js. Я могу использовать только файл collada, потому что obj слишком сложен для моего файла, а другие форматы неправильно импортируют мою модель.
Как я могу добавить текстуру поверх модели коллада? Как добавить градиентную текстуру в Three.js к той же модели? Я знаю, как я обычно добавляю текстуру в модель в three.js, но, похоже, произошла ошибка, или я должен сделать что-то другое при обработке файла.dae. Ниже я загрузил некоторый код.

<body>

    <div id="container"></div>

    </div>

    <script src="https://threejs.org/build/three.js"></script>

    <script src="https://threejs.org/examples/js/loaders/ColladaLoader2.js"></script>
    <script src="https://threejs.org/examples/js/Detector.js"></script>
    <script src="https://threejs.org/examples/js/libs/stats.min.js"></script>

    <script>
        if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
        var container, stats, clock;
        var camera, scene, renderer, elf;
        init();
        animate();
        function init() {
            container = document.getElementById( 'container' );
            camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 2000 );
            camera.position.set( 8, 10, 8 );
            camera.lookAt( new THREE.Vector3( 0, 3, 0 ) );
            scene = new THREE.Scene();
            clock = new THREE.Clock();
            // loading manager
            var loadingManager = new THREE.LoadingManager( function() {
                scene.add( elf );
            } );
            // collada
            var loader = new THREE.ColladaLoader( loadingManager );
            loader.options.convertUpAxis = true;
            loader.load( 'modelMaya.dae', function ( collada ) {
                elf = collada.scene;
                var s=.3;
                elf.scale.set(s,s,s);
                var setMaterial = function(node, material) {
              node.material = material;
              if (node.children) {
            for (var i = 0; i < node.children.length; i++) {
              setMaterial(node.children[i], material);
                   }
               }
                   }
           var materialcollada = new THREE.MeshBasicMaterial({  color:0xD8C052});
           var mesh= new THREE.Mesh(elf, materialcollada);



            } );
            //
            var ambientLight = new THREE.AmbientLight( 0xcccccc, 0.4 );
            scene.add( ambientLight );
            var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.8 );
            directionalLight.position.set( 1, 1, 0 ).normalize();
            scene.add( directionalLight );
            //
            renderer = new THREE.WebGLRenderer();
            renderer.setPixelRatio( window.devicePixelRatio );
            renderer

0 ответов

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