如何在THREE.js中将材料设置为collada child

时间:2015-03-29 13:40:44

标签: three.js collada

我在搅拌机中创建了一个场景,它包含一些带有材料的网格,然后我将它导出到collada,我将它加载到three.js场景,使用colladaloader一切正常,但是当我使用以下代码将一些材料放入儿童时: / p>

        loader.load( "../models/islands/"+islandselected.getAttribute("data-model")+".dae", function(object){
        scene.remove("island");
        plane=object.scene;
        plane.name=islandselected.innerHTML;

        plane.traverse(function(child){
            if(child.children[0]){
                if(child.children[0].geometry){
                    console.log(child)
                    var t = new THREE.ImageUtils.loadTexture( '../models/islands/'+child.name+'.jpg' );
                    t.wrapS = t.wrapT = THREE.RepeatWrapping;
                    t.repeat.set( 50, 50 );
                    var ma= new THREE.MeshBasicMaterial( {map:t} );
                    child.children[0].material=ma
                }
            }
        });
        plane.scale.set(100,100,100);

        scene.add(plane);
    });

我在控制台中遇到错误: [.WebGLRenderingContext] GL错误:GL_INVALID_OPERATION:glDrawElements:尝试访问属性1中超出范围的顶点 empcreator.jsp:1 WebGL:错误太多,不会再向控制台报告此上下文的错误。

1 个答案:

答案 0 :(得分:0)

        var model,mat;

        var loader = new THREE.ColladaLoader();
        var lastTimestamp = 0;
        var progress = 0;

        loader.load( 'obj/mymodel.dae', function ( collada ) {

            model = collada.scene;

            model.children[3].children[0].material = new THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('obj/images/myimage.jpg')}); 
            console.log(model.material);                
            model.scale.x = model.scale.y = model.scale.z = 0.10; 
            model.rotation.y = 0.80;
            scene.add( model );
         }

        //you will need to modify a little to work it, i took it from my old project