2012-02-16 3 views
1

수동으로 (Three.js와 같은 라이브러리가 필요 없음) JSON 3D 모델을 내 webGL 코드에로드하면 재미가 있지만 모델에 텍스처가 두 개 이상있는 경우 힘들어합니다. OBJ-> JSON 변환 된 파일에서 다음에 나오는면에 대해 "활성"인 텍스처를 어떻게 알 수 있습니까? OBJ 파일은 'usemtl'태그를 사용하여 사용중인 텍스처/재질을 식별하지만 JSON으로 작업 할 때 그런 종류의 포인터를 찾지 못하는 것 같습니다. 시간에 , 내가 alteredq다중 텍스처 OBJ-> JSON 변환 된 파일은 얼굴 텍스처 매핑을 어떻게 추적합니까?

덕분에 무리가 쓴를 OBJ> JSON 컨버터를 사용하고, 로드

나는 KickJS 게임 엔진에 대한 쓴를 OBJ> JSON 변환에

답변

1

는 일에서보세요 파일은 three.js/src/extras/loaders/JSONLoader.js입니다.

faces JSON 파일의 각면의 첫 번째 요소는 비트 필드입니다. 첫 번째 비트는 얼굴에 3 개의 인덱스가있는 경우입니다. 그리고 두 번째 비트는 그면에 재료가 할당되어 있다고 말합니다. 재질 인덱스가 있으면 인덱스 다음에 나타납니다.

예 : faces: [2, 46, 44, 42, 0, 1, 45, 46, 48, 3, ...

1면 (재질 삼각형)

Type: 2 (00000010b) 
Indices: 46, 44, 42 
Material index: 0 

2면 (재료없이 쿼드)

Type: 1 (00000001b) 
Indices: 45, 46, 48 

번째면 (재료 쿼드)

Type: 3 (00000011b) 
Indices: ... 

비트 필드의 의미 전체를 보려면 소스 코드를 확인하십시오.

+0

Spot on. 대답 주셔서 감사합니다, 후안. – rod

+0

설명의 문제와 마찬가지로 해당 필드가 "바이트 필드"가 아니겠습니까? "비트 필드"는 0 또는 1 만 2 가지 가능성을 제공하는 1 비트를 보유합니다. 그럼에도 불구하고 매우 유용한 답변, 감사합니다. – rod

+0

@rod 아니요, "비트 필드"는 괜찮습니다. 위키 백과 [article] (http://en.wikipedia.org/wiki/Bit_field)를 참조하십시오. –

0

각 재료가있다 인덱스의 자체 범위.

mtllib plane.mtl 
    o Plane 
    v 1.000000 0.000000 -1.000000 
    v 1.000000 0.000000 1.000000 
    v -1.000000 0.000000 1.000000 
    v -1.000000 0.000000 -1.000000 
    usemtl Material 
    s 1 
    f 2 3 4 
    usemtl Material.001 
    f 1 2 4 

과 같은 간단한 OBJ 모델을 의미는 (두 개의 인덱스로 각 재료의 하나)이로 번역 될 것이다 :

[ 
     { 
      "vertex": [1,0,1,-1,0,1,-1,0,-1,1,0,-1], 
      "name": "Plane mesh", 
      "normal": [0,-1,0,0,-1,0,0,-1,0,0,0,0], 
      "indices0": [0,1,2], 
      "indices1": [3,0,2] 
     } 
    ] 

사용에게 convertion의 온라인 모델 뷰어 :

http://www.kickjs.org/example/model_viewer/model_viewer.html

+0

답변 해 주셔서 감사합니다. mortenobel. 그래도 제공 한 링크가 깨졌습니다. 내가 볼 수있는 것은 버튼 (오리, 큐브, 찻 주전자 등)뿐입니다. – rod

+0

현재 Firefox에 문제가 있습니다. Chrome을 사용해보세요 (Firefox 문제를 해결하는 동안) – Mortennobel

+0

문제가 해결되었습니다. 의견을 보내 주셔서 감사합니다. 나는 내 도구가 재미 있기를 바란다. – Mortennobel