문제

OpenGL을 사용하여 렌더러를 만들고 있습니다.Blender/Sketchup에 텍스처 모델이 있는데(둘 사이를 쉽게 교환할 수 있음) 해당 파일을 내 렌더러로 내보내고 싶습니다.내 초기 아이디어는 단순히 원시 면을 내보내고 해당 삼각형을 렌더링하는 것이었지만 텍스처 파일을 텍스처 좌표로 쉽게 분할하고 싶습니다.

즉, 내 모델의 얼굴이 삼각형으로 조각된다는 의미입니다.에서 볼 수 있습니다 이 사진 (아래 재현) 내 ​​곡선은 24개의 삼각형이 됩니다.각 삼각형에 어떤 텍스처 좌표를 사용할지 알고 싶습니다.

Polygonized curved 3D object

DAE 파일이 가장 쉬운 방법일까요?형식에 대한 사양을 읽어봤는데 충분히 쉬워 보입니다.XML을 구문 분석하고 OpenGL에서 모델을 충실하게 재현할 수 있다고 생각합니다.더 쉬운 방법이 있는지 궁금합니다(예:바퀴를 재발명하지 않는 것).

도움이 되었습니까?

해결책

.dae-format를 구문 분석하는 것이 편한 경우 사용하십시오. 그러나 텍스처 트라이앵글 메쉬를 내보내는 데만 관심이 있다면 .OBJ 형식 파스가 훨씬 간단합니다. SketchUp과 Blender 가이 형식을 내보낼 수 있다고 말할 수있는 것에서.

다른 팁

바이너리 형식이 당신을 놀라게하지 않으면 블렌더 및 스케치 업 플러그인을 작성하고 포장 된 정점 배열로 사전 구워진 지오메트리를 내보내는 것이 좋습니다.

이 방법의 아름다운 점은 앱에 구문 분석 또는 유형 변환이 없다는 것입니다. 간단한 연속 메모리 사본으로 모든 것이 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()

구문 분석하고 싶다면 .dae 파일, 나는 조사하는 것이 좋습니다 콜라다 파서..dae 실제로 Collada 파일의 확장, 최신 노력입니다. 크로노스 그룹 (OpenGL의 관리자) 3D 데이터 교환을위한 단일 통합 파일 형식이 있습니다.

기존 파서에 관해서는 여기에 내가 겪은 내용이 있습니다.

  • Collada-dom, 참조 구현. 이름에서 알 수 있듯이 XML 트리의 추상화 일뿐입니다.
  • fcollada, 더 좋은 추상화. 그러나이 프로젝트는 거의 2 년 동안 사망했으며, 내가 수집 한 것에서 앞으로 업데이트를 볼 가능성은 거의 없습니다.
  • Opencollada, 최근의 새로운 노력. 시도하지는 않았지만 그 뒤에는 활발한 커뮤니티가 있습니다.

즉, 유일한 목표가 정점, 정상 및 질감 좌표로 간단한 지오메트리를로드하는 것이면 .obj 파일 형식이 더 빠를 수 있습니다.

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

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

가져오기/내보내기를 고려할 때 먼저 가져오기를 처리하고 프로그램에서 합리적인 형식으로 데이터를 사용할 수 있게 해주는 오픈 소스 라이브러리를 찾으십시오.사용할 수 없고 자체 임포터를 작성해야 하는 경우 간단한 ASCII(XML 기반이 아님) 또는 필요에 맞는 바이너리 형식입니다.PLY가 적합할 수 있습니다.최후의 수단으로만 XML 기반 형식에 대한 가져오기 도구를 구현해 보는 것이 좋습니다.

또한 : lib3ds- http://www.lib3ds.org/libobj (링크를 게시하지 않겠다)

당신은 다음을 살펴 봐야합니다.

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

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

이 COM 서버를 사용하여 응용 프로그램에 .skp 수입업자를 작성할 수 있어야합니다.

가능하면 .tlb 파일을 가져와야합니다. 이렇게하면 Smart Pointers에 액세스 할 수 있으며 수입업자 (COM Client)를 단순화합니다.

버전 6 SDK (TLB 파일 포함)를 사용했습니다. SDK의 현재 버전에는이 파일이 포함되어 있지 않습니다.

누군가가 개발자 포럼에 솔루션 (누락 된 TLB 파일)을 게시했습니다.http://groups.google.com/group/su-sdk-fileshare/topics

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top