2012-06-19 2 views
3

예제 코드를 사용하여 obj 파일을로드하는 데 문제가 있습니다. 예제 파일 male02.obj을로드 할 때 아무런 문제가 없습니다. 그러나 파일을 삽입하면 개체가 표시되지 않습니다. 파이썬 변환기 스크립트와 JSONLoader를 사용할 때 같은 문제가 발생했습니다.three.js : THREE.OBJLoader를 사용하여 obj 파일을 표시 할 수 없습니다.

는 여기에 내가 three.js를 최신 버전 (49)를 사용하고있는 OBJLoader

<!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://github.com/mrdoob/three.js" target="_blank">three.js</a> - OBJLoader test 
     </div> 

     <script src="javascripts/Three.js"></script> 
     <script src="javascripts/OBJLoader.js"></script> 

     <script src="javascripts/Detector.js"></script> 
     <script src="javascripts/Stats.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); 

       scene = new THREE.Scene(); 

       camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 2000); 
       camera.position.z = 100; 
       scene.add(camera); 

       var ambient = new THREE.AmbientLight(0x101030); 
       scene.add(ambient); 

       var directionalLight = new THREE.DirectionalLight(0xffeedd); 
       directionalLight.position.set(0, 0, 1).normalize(); 
       scene.add(directionalLight); 

       var loader = new THREE.OBJLoader(); 
     //loader.load("img/male02.obj", function (object) { 
     loader.load("img/originalMeanModel.obj", function (object) { 
        object.position.y = - 80; 
        scene.add(object); 
       }); 

       // RENDERER 
       renderer = new THREE.WebGLRenderer(); 
       renderer.setSize(window.innerWidth, window.innerHeight); 
       container.appendChild(renderer.domElement); 

       document.addEventListener('mousemove', onDocumentMouseMove, false); 

      } 

      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> 
</html> 

에 대한 모든 코드입니다. 여기

는 OBJ 파일에 대한 링크가 내가 보낸 JSON 파일이 어떤 법선, 색상이나 UV를하지 않는다는 JSONLoader을 시도 할 때 내가 발견 https://dl.dropbox.com/u/23384412/originalMeanModel.obj

로드하려고합니다. Blender 또는 MeshLab에서 파일을 볼 때 영향을주지는 않지만 three.js에서 효과가 있습니까?

누구든지 나를 도울 수 있다면 크게 감사하겠습니다.

미리 감사드립니다.

+0

웹 서버없이 로컬로 실행 하시겠습니까? 이것을 읽으십시오 : https://github.com/mrdoob/three.js/wiki/How-to-run-things-locally – frank

답변

6

개체 및 카메라 위치는 모델의 위치와 크기에 따라 설정해야합니다.

"코멘트"모든 라인 :

camera.position.z = 100; 
... 
object.position.y = - 80; 
... 
document.addEventListener('mousemove', onDocumentMouseMove, false); 

그리고 카메라 위치를 코드로 연주 변경 시작은 :

camera.position.z = 2; 
+0

고맙습니다. 너무 많은 @Juan Mellado가 마침내 화면에 이미지를 가지고 있습니다! – TrueWheel

0

나는이에 대한 간단한 해결책을 가지고 있습니다. 1. three.js 설치 프로그램 패키지와 함께 제공되는 male02.obj 파일을 블렌더 또는 daz3d 또는 사용하는 모든 3D 프로그램으로 가져옵니다 (단, Daz3d를 사용하여이 작업을 시도했습니다). 2. html로 바꾸려는 모든 .obj 파일을 가져옵니다. 그 obj가 male02.obj와 같은 높이에 있도록 rescale하십시오. 3. 장면에서 maleo2.obj를 삭제하고 원하는 새 것을 보관하십시오. 이 파일을 obj로 내 보냅니다. 4. 코드에 추가하십시오.

정상적으로 작동합니다.이 소스에 objs를 추가하는 데 며칠 정도 걸렸으며이 방법으로 성공했습니다.

+0

좋은 제안. 고마워, 정말 도움이 됐어. – cengel

+0

이것은 단지 일시적인 해결책 일뿐입니다. 테두리 상자를 사용하여 모델의 크기와 위치를 파악해야합니다. – gaitat

관련 문제