将MeshBasicMaterial应用于使用Three.js加载的obj + mtl

时间:2015-09-02 11:15:12

标签: three.js

当我用Three.js加载obj + mtl + jpg数据时,根据three.js文档将对象的材质设置为MeshLambertMaterial。如果我想将材质更改为另一个,例如MeshBasicMaterial,我该怎么做?

以下代码从我的服务器加载obj + mtl + jpg并使用MeshLambertMaterial显示数据。我尝试使用以下代码(注释)应用MeshBasicMaterial,但它失败并且对象显示为白色。

<!DOCTYPE html>
<html lang="ja">
<head><meta charset="UTF-8"></head>
<script src="http://threejs.org/build/three.min.js"></script>
<script src="http://threejs.org/examples/js/loaders/MTLLoader.js"></script>
<script src="http://threejs.org/examples/js/loaders/OBJMTLLoader.js"></script>
<body>
<div id="canvas_frame"></div>
    <script>
    var canvasFrame, scene, renderer, camera;
    canvasFrame = document.getElementById('canvas_frame');
    renderer = new THREE.WebGLRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    canvasFrame.appendChild( renderer.domElement );
    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 1, 1000 );
    camera.position.set(50,50,50);
    camera.lookAt( {x: 0, y: 0, z: 0} );
    var ambient = new THREE.AmbientLight(0xFFFFFF);
    scene.add(ambient);

    function animate() {
        renderer.render( scene, camera );
        requestAnimationFrame( animate );
    }

    function loadObjMtl(objUrl, mtlUrl, url, x, y, z){
          var loader = new THREE.OBJMTLLoader();
          loader.crossOrigin = 'anonymous';
          loader.load( objUrl, mtlUrl,
              function ( object ) {
                object.url = url; 
                object.position.set(x,y,z);

            object.traverse( function( node ) {
                if( node.material ) {
                    ////This doesn't work. How can I apply material for loaded obj?
                    //var material = new THREE.MeshBasicMaterial();
                    //if ( node instanceof THREE.Mesh ) {
                    //    node.material = material;
                    //}
                }
            });





                scene.add ( object ); 
            });
    }

    objUrl = "http://test2.psychic-vr-lab.com/temp/mesh_reduced.obj";
    mtlUrl = "http://test2.psychic-vr-lab.com/temp/mesh_reduced.mtl";
    loadObjMtl(objUrl,mtlUrl,"",0,0,0);

    animate(); 
    </script>

  </body>
</html>

1 个答案:

答案 0 :(得分:0)

您看到它完全是白色的,因为您没有为 MeshBasicMaterial 指定任何颜色。

试试这个:

var material = new THREE.MeshBasicMaterial({ color: 0xff0000 });

你会看到所有的红色:它正在发挥作用。

我认为您可能想要区分不同的网格,或者应用任何纹理,对吗?