2015-02-01 2 views
0

Three.ObjectLoader에 문제가있는 것 같습니다. JSON 형식 4.3으로 씬을 내보내고 있습니다. 이 장면에는 지오메트리, 재료 및 조명이 포함됩니다. 장면이 Three.js 편집기에서 오류없이 잘 열립니다.THREE.ObjectLoader를 사용한 Three.js 오류

저는 Three.js r70 master가있는 Firefox에서 작업하고 있습니다. 다음은 생성 된 JSON에 대한 링크입니다 : https://gist.github.com/fraguada/d86637f7987096b361ea

뷰어에서 내가로드에 대해 다음 코드를 사용하고 작성하는 것을 시도하고있다 :

var manager = new THREE.LoadingManager(); 
manager.onProgress = function (item, loaded, total) { 

    console.log(item, loaded, total); 

}; 

// instantiate a loader 

var loader = new THREE.ObjectLoader(manager); 

loader.load( 
    // resource URL coming from other file 
    Name, 
    // Function when resource is loaded 
    function (result) 
    { scene.add(result.scene); }, 
    // Function called when download progresses 
    function (xhr) 
    { console.log((xhr.loaded/xhr.total * 100) + '% loaded'); }, 
    // Function called when download errors 
    function (xhr) 
    { console.log('An error happened'); } 
); 

나는 다음을 참조 콘솔에서가 :

THREE.WebGLRenderer 70 three.min.js (line 513) 
100% loaded content.js (line 117) 
THREE.Object3D.add: undefined is not an instance of THREE.Object3D. three.min.js (line 164) 
js/Test83.js 1 1 content.js (line 86) 
오류는 줄에 unminified three.js를 나타납니다

7674 내가 형상을 만드는 경우

이 문제가 나타납니다 및 기타 개체를 Three.js 편집기에 저장하고 장면으로 내 보냅니다.

문제는 여기에있는 것 같습니다 : scene.add(result.scene); THREE.ObjectLoader가 파일에서 JSON을 사용할 수 있다고 가정 할 때 올바르지 않습니까? 내가 게시 코드에서 scene.add(result.scene);을 제거하면 오류가 나타나지 않으므로 파일로드가 적어도 (데이터로드, 형상이 시각화되지 않음) 보인다. 메쉬가 많은 장면이있는 경우 진행률이 콘솔에 출력됩니다 (10 %로드 됨, 20 %로드 됨 등).

통찰력이 있으면 크게 감사하겠습니다.

+0

p.s. 'result.scene);을 시도하기 전에'result' 객체를 조사하면 파일의 모든 JSON 내용을 볼 수 있습니다. 그래서 그것은 ok를로드하는 것처럼 보인다. 정의되지 않은 중요한 객체를 추적하여 차이가 나는지 확인합니다. –

+0

result.scene은 결과가 실제로 기존 장면을 대체 할 수있는 주요 원인입니다. 내가 '장면 = 결과'를한다면, 나는 완전한 백인 세계를 얻는다. 객체가 있지만 속성이없는 것처럼 보입니다 (속성이 속성의 일부로 표시 되더라도). 결과의 자식을 살펴보면 메쉬를 장면에 추가하고 기본 평면 재질로 그 메쉬를 가져올 수 있습니다. 그래서 진전을 보이고 있습니다. 결과를 가져 와서 객체 로더와 함께 표시하는 누락 된 더 나은 방법이있는 것처럼 보입니다. –

답변

0

대신 scene.add(result)을 사용해야한다고 생각합니다.

+0

이것이 객체 일 뿐이라면 작동 할 것이라고 생각하지만 위의 원본 게시물의 코드에'scene.add (result.object)'를 삽입하려고하면이 파일에 메타 데이터, 조명 등이 포함되어 있으므로 추가 오류가 발생합니다. 또한 위에서 언급 한 오류가 발생합니다. 'THREE.Object3D.add : undefined는 THREE.Object3D의 인스턴스가 아닙니다. three.min.js (164 행)' –

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – DLeh

+0

@ DLeh 죄송 합니다만, 당신이 무슨 말을하고 있는지 당신은 모른다. – mrdoob

2

파기를 한 후에 THREE.XHRLoader를 사용하여 JSON을 가져온 다음 THREE.ObjectLoader를 사용하여 결과를 구문 분석해야한다는 것을 깨달았습니다. 이런 식으로 뭔가 작업을해야합니다 :

var loaderObj = new THREE.ObjectLoader(); 
var loader = new THREE.XHRLoader(); 
      loader.load('js/data.json', function (text) { 
       text = "{ \"scene\" : " + text + " }"; 
       var json = JSON.parse(text); 
       var scene = loaderObj.parse(json.scene); 
      }, 
      // Function called when download progresses 
      function (xhr) 
      { console.log((xhr.loaded/xhr.total * 100) + '% loaded'); }, 
      // Function called when download errors 
      function (xhr) 
      { console.log('An error happened'); } ); 

이 방법은 잘 작동하고, 하나는 ThreeJS 편집기를 통해 장면을 발행 할 때 생성 된 코드를 검사에서 배운했다.