2014-12-06 26 views
4

我想在對象上應用紋理。 這是我的代碼:three.js-爲什麼它不在對象上應用紋理

<html> 
    <head> 
     <title>My first Three.js app</title> 
     <style> 
      body { margin: 0; } 
      canvas { width: 100%; height: 100% } 
     </style> 
    </head> 
    <body> 
     <script src="three.min.js"></script> 
     <script src="OBJLoader.js"></script>   
<script> 
      var container; 
      var camera, scene, renderer; 
      var mouseX = 0, mouseY = 0; 
      var windowHalfX = window.innerWidth/2; 
      var windowHalfY = window.innerHeight/2; 
      init(); 
      animate(); 
      function init() { 
       container = document.createElement('div'); 
       document.body.appendChild(container); 
       camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 2000); 
       camera.position.z = 100; 
       // scene 
       scene = new THREE.Scene(); 
       var ambient = new THREE.AmbientLight(0x101030); 
       scene.add(ambient); 
       var directionalLight = new THREE.DirectionalLight(0xffeedd); 
       directionalLight.position.set(0, 0, 1); 
       scene.add(directionalLight); 
       // texture 
       var manager = new THREE.LoadingManager(); 
       manager.onProgress = function (item, loaded, total) { 
        console.log(item, loaded, total); 
       }; 
       var texture = new THREE.Texture(); 
       var onProgress = function (xhr) { 
        if (xhr.lengthComputable) { 
         var percentComplete = xhr.loaded/xhr.total * 100; 
         console.log(Math.round(percentComplete, 2) + '% downloaded'); 
        } 
       }; 
       var onError = function (xhr) { 
       }; 
       var loader = new THREE.ImageLoader(manager); 
       loader.load('bb.jpg', function (image) { 
        texture.image = image; 
        texture.needsUpdate = true; 
       }); 
       // model 
       var loader = new THREE.OBJLoader(manager); 
       loader.load('note4.obj', function (object) { 
        object.traverse(function (child) { 
         if (child instanceof THREE.Mesh) { 
          child.material.map = texture; 
         } 
        }); 
        object.position.y = - 80; 
        scene.add(object); 
       }, onProgress, onError); 
       // 
       renderer = new THREE.WebGLRenderer(); 
       renderer.setSize(window.innerWidth, window.innerHeight); 
       container.appendChild(renderer.domElement); 
       document.addEventListener('mousemove', onDocumentMouseMove, false); 
       // 
       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); 
      } 
      function onDocumentMouseMove(event) { 
       mouseX = (event.clientX - windowHalfX)/2; 
       mouseY = (event.clientY - windowHalfY)/2; 
      } 
      // 
      function animate() { 
       requestAnimationFrame(animate); 
       render(); 
      } 
      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); 
      } 
     </script> 
     <div><canvas width="1360" height="150" style="width: 1360px; height: 150px;"></canvas></div> 
    </body> 
</html> 

所有js文件,質地和對象文件都在同一個文件夾中。 當我打開頁面時,它給了我這些錯誤。我在firefox和chrome上測試了它,firefox向我展示了這些錯誤。

THREE.WebGLRenderer 69 
THREE.WebGLRenderer: OES_texture_float extension not supported. 
THREE.WebGLRenderer: OES_texture_float_linear extension not supported. 
THREE.WebGLRenderer: OES_standard_derivatives extension not supported. 
requestAnimationFrame is not defined 
[Break On This Error] requestAnimationFrame(animate); 
index.html (line 83) 
bb.jpg 1 2 
text is undefined 
[Break On This Error] var lines = text.split('\n'); 
OBJLoader.js (line 195) 

我在做什麼錯? 期待聽到您

回答

0

你加載的紋理與圖像加載器:

var loader = new THREE.ImageLoader(manager); 
    loader.load('bb.jpg', function (image) { 
     texture.image = image; 
     texture.needsUpdate = true; 
}); 

我從來沒有用它,因爲在給定的紋理以不同的方式加載大多數示例工作:

var texture = THREE.ImageUtils.loadTexture('path/to/texture.png');