2009-12-01 5 views
12

OpenGL을 사용하여 렌더러를 만들고 있습니다. Blender/Sketchup에서 모델을 텍스처 처리 했으므로 (두 모델을 쉽게 교환 할 수 있습니다.) 렌더러에 파일을 내보낼 수 있기를 바랍니다. 내 초기 아이디어는 단순히 원시면을 내보내고 그 삼각형을 렌더링하는 것이었지만 텍스처 파일에 텍스처 파일을 쉽게 조각하고 싶습니다.OpenGL의 블렌더/스케치 업 모델 사용

내 모델 얼굴이 삼각형으로 조각 된 것을 의미합니다. this image (아래에서 재현)에서 내 곡선이 24 삼각형이된다는 것을 알 수 있습니다. 각 삼각형에 대해 사용할 텍스처 좌표를 알고 싶습니다.

Polygonized curved 3D object

는 DAE 파일은 해당 작업을 수행하는 가장 쉬운 방법이 될 것인가? 나는 형식에 대한 사양을 읽고 있었고, 충분히 쉽게 보입니다. 나는 XML을 파싱하고 OpenGL에서 모델을 충실하게 재현 할 수 있다고 생각한다. 더 쉬운 방법 (즉, 바퀴를 재발견하지 않는 방법)이 있는지 궁금합니다.

+0

당신이 무슨 뜻인지에 정교한 (나 링크를 게시하지 않습니다) Lib3DS

A는 믹서기 수출이 같이 보입니다 벗었 "내 텍스처 파일을 텍스처 좌표로 쉽게 조각하고 싶습니다." –

+0

확실한 것! 내 원래 게시물을 수정했습니다. – mkenyon

+2

이미지 규칙이있는 질문이 있으니 자유롭게 추가했습니다. – unwind

답변

12

.dae 형식의 구문 분석에 익숙하다면 꼭 사용하십시오. 그러나 텍스처 삼각형 메쉬를 내보내는 데 관심이 있다면 을 사용하는 것이 훨씬 더 간단합니다. Sketchup과 Blender가이 형식을 내보낼 수 있음을 알 수 있습니다.

+0

같은 데이터를 나타내는 더 간단한 방법처럼 보입니다. 나는 오늘 밤에 OBJ 형식을 조사 할 것이다. – mkenyon

+1

OBJ (및 해당 MTL 파일)이 아름답게 작동한다는 것을 알고 싶습니다. 정말 고맙습니다! – mkenyon

+0

당신을 환영합니다! –

1

모델링 프로그램 (예 : Blender 또는 Sketchup)에서 사용되는 적절한 파일 형식에는 사용자가 보는 지오메트리를 다시 만드는 데 필요한 모든 정보가 포함됩니다. 여기에는 지오메트리 유형 (예 : 삼각형 스트립, 개별 삼각형 ​​등), 지오메트리의 정점 및 법선, 사용 된 재료 특성 및 적절한 텍스처 좌표와 함께 사용되는 텍스처가 포함됩니다. 잠재적 인 파일 형식이 부족한 경우 다른 파일 형식을 선택하십시오.

XML 구문 분석이 간단하다고 생각한다면 expat, Xerces 또는 기타 언어 별 구현과 같이 기존 라이브러리를 사용하여이 작업을 수행하기를 바랍니다.

가져 오기/내보내기를 고려할 때 먼저 가져 오기를 처리 할 수있는 오픈 소스 라이브러리를 찾고 적절한 형식으로 프로그램에서 데이터를 사용할 수 있도록하십시오. 그게 가능하지 않다면, 당신은 자신의 수입을 작성해야하며, 필요에 맞는 간단한 ASCII (XML 기반이 아닌) 또는 바이너리 형식을 찾으십시오. PLY가 적합 할 수 있습니다. 최후의 수단으로 만 XML 기반 형식에 대한 가져 오기 도구를 구현하는 것이 좋습니다.

+0

나는 전에 웹 앱을 다뤘다. 나는 내 자신의 XML 파싱을하지 않을만큼 충분히 알고있다. 그것은 도서관을 통해서 일 것입니다. – mkenyon

2

.dae 파일을 구문 분석하려면 Collada 파서를 조사하는 것이 좋습니다. .dae은 실제로 Collada 파일의 확장이며, Khronos group (OpenGL 관리자)의 최신 노력으로 3D 데이터 교환을위한 단일 통합 파일 형식을 갖습니다.

  • collada-dom, 참조 구현 : 기존 파서에 관해서는

    는, 나는 여기에 걸쳐 어떤 왔어요된다. 이름에서 알 수 있듯이 XML 트리는 XML 트리를 추상화 한 것입니다.

  • FCollada, 더 멋진 추상화. 그러나,이 프로젝트는 거의 2 년 동안 죽었고, 내가 모은 것에서부터 우리는 앞으로 어떤 업데이트가 있을지 모릅니다.
  • OpenCollada 최근의 새로운 시도. 그것을 시도하지는 않았지만 그 뒤에는 활발한 커뮤니티가 있습니다.

말하자면, 파일 형식이 .obj 인 간단한 정점을 정점, 법선 및 텍스처 좌표로로드하는 것이 더 빠른 방법 일 수 있습니다.

+0

OBJ 파일이 아름답게 작동한다는 것을 알고 싶습니다. 정말 고맙습니다! – mkenyon

0

당신은에서 살펴 보셔야합니다 :

http://sketchup.google.com/community/developers.html

스케치 팀은 무료로 C++ COM 서버를 제공합니다. 이것을 사용하면 .skp 파일에 대한 많은 정보에 액세스 할 수 있습니다.

이 COM 서버를 사용하여 응용 프로그램에 .skp 가져 오기 프로그램을 작성할 수 있어야합니다.

가능한 경우 .tlb 파일을 가져와야합니다. 이렇게하면 스마트 포인터에 액세스 할 수있어 수입업자 (COM 클라이언트)가 간단 해집니다.

tlb 파일이 포함 된 버전 6 SDK를 사용했습니다. 현재 버전의 SDK에는이 파일이 포함되어 있지 않습니다. 바이너리 형식을 놀라게하지 않는 경우 이 http://groups.google.com/group/su-sdk-fileshare/topics

5

가, 내가 블렌더 & 스케치 업 플러그인을 작성하고 수출 좋을 것 :

누군가가 개발자 포럼 (누락 된 TLB 파일) 솔루션을 게시 기하학은 포장 한 정점 배열로 pre-baked.

이 방법의 가장 좋은 점은 앱에 구문 분석이나 유형 변환이 없다는 것입니다. 모든 것이 간단한 연속 메모리 복사본으로 GPU에 전송 될 준비가되었습니다. 정적 지오메트리에 적합합니다.


#!BPY 
import bpy, struct 
from Blender import * 

self.fh = open("MyFileName", "w") 
m = bpy.data.meshes["MyMeshName"] 
faces = m.faces 
for face in faces: 
    for (vertex, uv) in zip(face.verts, face.uv): 
     self.fh.write(struct.pack('<fff', *vertex.co)) # coords 
     self.fh.write(struct.pack('<fff', *vertex.no)) # normals 
     self.fh.write(struct.pack('<ff', uv.x, uv.y)) # uvs 

self.fh.close()