1

texture is not loaded in to ring 3d model.but it will work for some other objects.there is no compile errors.I set the all all light condition correctly.but 3d model color is grey/black.texture loaded for other object correctly.3d object file format is .obj,I didn't load mtl file to my code. mtlobjloader is not in threejs.org,there are someway to load mtl file and mapping the texture to object. plz help me.

enter code here

<html>
<head>
<title> Test Three.js</title>
<style type="text/css">
        BODY
        {
            margin: 0;
        }

        canvas
        {
            width: 100%;
            height:100%;
        }



        </style>
</head>
<body>


            <div>
                <p>Color:
                <button class="jscolor{onFineChange:'onClick(this)',valueElement:null,value:'66ccff'}" 
                     style="width:50px; height:20px;"></button>
                    </p>
                    <p>Object:
                        <button style="width:50px; height:20px;" id="object"></button>
                    </p>
            </div>

        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
        <script src="three.min.js"></script>
        <script src="TrackballControls.js"></script>
        <script src="jscolor.js"></script>
        <script src="AmbientLight.js"></script>
        <script src="SpotLight.js"></script>">
        <script src="JSONLoader.js"></script>">
        <script src="ObjectLoader.js"></script>">
        <script src="OBJLoader.js"></script>">
        <script src="MTLLoader.js"></script>">
        <script src="Material.js"></script>">
        <script src="MeshPhongMaterial.js"></script>">
        <script>
        function onClick(jscolor) {

        cube.material.color = new THREE.Color('#'+jscolor);
        cube.material.needsUpdate = true;
        };

        var onClicked=function (){
            scene.remove(cube);

            var material1 = new THREE.LineBasicMaterial({
                color: 'red'
            });

            var geometry1 = new THREE.Geometry();
            geometry1.vertices.push(
                new THREE.Vector3( -10, 0, 0 ),
                new THREE.Vector3( 0, 10, 0 ),
                new THREE.Vector3( 10, 0, 0 )
            );

            var cube1 = new THREE.Line( geometry1, material1 );
            scene.add( cube1);

        };  

        $('#object').click(onClicked);

        var scene =new THREE.Scene();
        var camera=new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,1000);

        var controls =new THREE.TrackballControls(camera);
        controls.addEventListener('change',render);
        var renderer = new THREE.WebGLRenderer( { alpha: true });

        renderer.setSize(window.innerWidth,window.innerHeight);
        document.body.appendChild(renderer.domElement);
        /*var material = new THREE.MeshLambertMaterial({color:'red'});
        var geometry=new THREE.CubeGeometry(100,100,100);
        var cube=new THREE.Mesh(geometry,material);
        scene.add(cube);*/

        camera.position.z=500;
        var light = new THREE.AmbientLight( 0x404040 );
        light.intensity = 0;
        light.position.z=10;
        light.position.y=10;  // soft white light
        scene.add( light );



                     //  }
        //init();

         /* var loader = new THREE.JSONLoader();
        loader.load( 'ring.json', function ( geometry ) {
        var mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial() );

                        mesh.position.x =500;
                        mesh.position.y =100;
                        mesh.position.z =500;
        scene.add( mesh );

        }); *//*
        var loader = new THREE.ObjectLoader();
        loader.load("ring.json",function ( obj ) {
            THREE.ImageUtils.crossOrigin = '';
      var texture = THREE.TextureLoader("images.jpg");
       //obj.map= texture;
       obj.scale.set (10,10,10);

        obj.traverse( function( child ) {
            if ( child instanceof THREE.Mesh ) {
                child.geometry.computeVertexNormals(); 
                child.material.map=texture;
            }
        } );
             scene.add( obj );
        });*/
    var manager = new THREE.LoadingManager();
      manager.onProgress = function ( item, loaded, total ) {
        console.log( item, loaded, total );
      };
      var texture = new THREE.Texture();
      var loader = new THREE.ImageLoader( manager );

      // You can set the texture properties in this function.
      // The string has to be the path to your texture file.
      loader.load( 'brick_bump.jpg', function ( image ) {
        texture.image = image;
        texture.needsUpdate = true;
        // I wanted a nearest neighbour filtering for my low-poly character,
        // so that every pixel is crips and sharp. You can delete this lines
        // if have a larger texture and want a smooth linear filter.
       // texture.magFilter = THREE.NearestFilter;
        //texture.minFilter = THREE.NearestMipMapLinearFilter;
      } );

        var loader = new THREE.OBJLoader(manager);
        /*var Mloader= new THREE.MTLLoader(manager);
        Mloader.load('ring.mtl',function(object){
            object.traverse( function ( child ) {
          if (child.material instanceof THREE.MeshPhongMaterial ) {
            child.material.map = texture;
          }
        } );
            scene.add( object );
        });*/
      // As soon as the OBJ has been loaded this function looks for a mesh
      // inside the data and applies the texture to it.
      loader.load( 'ring1.obj', function  ( event ) {
        var object = event;
        /*for ( var i = 0, l = object.children.length; i < l; i ++ ) {

            object.children[ i ].material.map = texture;

            console.log("rgr"+ object);
            }*/

        object.traverse( function ( child ) {
          if ( child instanceof THREE.Mesh ) {
            child.material.map = texture;
            console.log("rgr"+ object.children);
          }
        } );

        // My initial model was too small, so I scaled it upwards.
        object.scale = new THREE.Vector3( 25, 25, 25 );

        // You can change the position of the object, so that it is not
        // centered in the view and leaves some space for overlay text.
        object.position.y -= 2.5;
        scene.add( object );
      });



        function render(){

            renderer.render(scene,camera);
        }

        function animate(){
            requestAnimationFrame(animate);
            controls.update();
        }

        animate();

        </script>

</body>
</html>
arunaDJ
  • 1
  • 3

1 Answers1

0

First I would check the ring.obj file. You'll need to verify that the ring.obj file is exporting with UV values on all vertexes. UV values assign points on the texture to specific points on the mesh. E.g. they define how the texture is draped over the surface. If you do not have control of the ring.obj export process to quality assure it, there was a conversation on stack about generating UVs at load time here:

THREE.js generate UV coordinate

But your milage may vary if the mesh author had specific texture anchors.

This may not be the issue, but since the texture is working for other meshes, I would think there is an issue with the ring mesh.

Community
  • 1
  • 1
Radio
  • 2,810
  • 1
  • 21
  • 43
  • but I open through the blender 3d modeling application.I can change the texture.I import the ring with the plane to three.js.texture will appear to plane,not into ring.I think some issue in ring mesh.how can I fix it sir??? – arunaDJ Apr 15 '16 at 02:19
  • At this point it is a blender question, which I cannot answer. There is a forum discussion here http://blenderartists.org/forum/showthread.php?223482-Applying-a-UV-map-to-mesh – Radio Apr 18 '16 at 16:40