2014-04-02 56 views
2

我想加載.obj文件使用three.js, ,但不幸的是它說錯誤:「加載資源失敗:服務器響應狀態爲404(不是實測值)」使用three.js加載.obj的問題

下面是我使用的示例鏈路

視圖源:http://mrdoob.github.io/three.js/examples/webgl_loader_obj.html

代碼如下

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>three.js webgl - loaders - OBJ loader</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> 
     <style> 
      body { 
       font-family: Monospace; 
       background-color: #000; 
       color: #fff; 
       margin: 0px; 
       overflow: hidden; 
      } 
      #info { 
       color: #fff; 
       position: absolute; 
       top: 10px; 
       width: 100%; 
       text-align: center; 
       z-index: 100; 
       display:block; 
      } 
      #info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer } 
     </style> 
    </head> 

<body> 
    <div id="info"> 
    <a href="http://threejs.org" target="_blank">three.js</a> - OBJLoader test 
    </div> 

    <script src="../build/three.min.js"></script> 
    <script src="js/loaders/OBJLoader.js"></script> 

    <script src="js/Detector.js"></script> 
    <script src="js/libs/stats.min.js"></script> 

    <script> 

     var container, stats; 

     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 loader = new THREE.ImageLoader(manager); 
      loader.load('textures/UV_Grid_Sm.jpg', function (image) { 

       texture.image = image; 
       texture.needsUpdate = true; 

      }); 

      // model 

      var loader = new THREE.OBJLoader(manager); 
      loader.load('obj/male02/male02.obj', function (object) { 

       object.traverse(function (child) { 

        if (child instanceof THREE.Mesh) { 

         child.material.map = texture; 

        } 

       }); 

       object.position.y = - 80; 
       scene.add(object); 

      }); 

      // 

      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> 

</body> 

如果有人有這些上面的例子工作,請讓我知道你是怎麼做的?

感謝, PRATIK

+0

你說你試圖加載.obj文件....那麼爲什麼要鏈接到threejs的例子?這個例子不是爲你加載的嗎?它爲我加載好。404錯誤僅僅意味着文件的路徑是錯誤的。 – 2pha

+0

是的例子是不加載我的對象....請給我發送例子的工作副本。 – Pratik

+0

你想在本地機器上運行它嗎? – 2pha

回答

1

404錯誤意味着文件不能在你定義它的位置被發現。如果你在本地主機上運行,​​然後在同一文件夾中的文件demo.html,你應該有:

  • 稱爲OBJ包含一個名爲包含一個名爲male02.obj
  • 的文件male02目錄的目錄稱爲包含名爲UV_Grid_Sm.jpg的文件的紋理目錄

該錯誤表示您目前沒有。

如果您是一位經驗豐富的開發人員,我想您現在可以解決這個問題。如果您對開發新手感興趣,並且努力瞭解當前鏈接指向的位置,可能花一些時間來重新理解絕對鏈接和相對鏈接:http://webdesign.about.com/od/beginningtutorials/a/aa040502a.htm

+0

HOw給loader.load('obj/male02/male02.obj' ,函數(object)? – Pratik

+0

我試圖穿上obj/male02/male02.obj,但仍然有相同的路徑錯誤 – Pratik

4

我的問題是在Windows Server上允許MIME類型。

您可以手動或代碼做到這一點:

手動方式:

  1. 進入IIS設置
  2. 打開Mime類型設置
  3. 單擊添加
  4. MIME類型extinsion: .obj
  5. Mime類型:application/octet-stream
  6. 單擊添加
  7. 重新啓動您的網站或應用程序池

碼 - 把以下內容Web.config文件:

<system.webServer> 
    <staticContent> 
     <mimeMap fileExtension=".obj" mimeType="application/octet-stream" /> 
    </staticContent>  
</system.webServer> 
0

我遇到了這個問題,並沒有成功改變了MIME設置。似乎解決這個問題的方法是直接從我的Web主機面板重新創建一個新文件,並將.obj和.mtl代碼複製到該文件中,並用適當的後綴對其重新命名。

相關問題