posted by cimple 2009. 9. 25. 04:40

OpenMesh 는 Half-edge Data Structure 를 기반으로 하여 Mesh Data 를 효율적으로 처리할 수 있게끔 한 라이브러리입니다. 또한 개발자가 사용하기에 편리한 훌륭한 Function Set 도 제공하고 있습니다.

OpenMesh 에 대한 구체적인 소개와 Half-edge Data Structure 에 대한 상세한 설명은 다음으로 미루고, 지금은 어떻게 내 컴퓨터에 OpenMesh 라는 라이브러리를 사용할 수 있는 기본적인 환경을 구축할 것인가만 이야기하도록 하겠습니다.

시작하기에 앞서서, 저 또한 프로그래밍의 지식이 얕은 관계로 상세하고 세련된 설명은 곁들이지 못함을 양해해주시기 바랍니다.
또한 OpenMesh 는 다양한 개발 환경에서 손쉽게 호환될 수 있도록 Cmake / Qmake 를 통한 컴파일을 지원하며, 다른 그래픽 library/framework 들과 연동하여 훌륭한 visualization 을 제공하는데, 이 부분에 대해서 상세하게 설명드리지 못함을 또한 양해 바랍니다. OpenMesh 공식 사이트의 Compiling OpenMesh 페이지 (http://openmesh.org/Documentation/OpenMesh-2.0RC3-Documentation/compiling.html) 에 자세한 설명이 곁들여져 있으므로 참고하실 분들은 참고하시면 될 것 같습니다. 이 글은 단순히 OpenMesh 가 가지고 있는 mesh data structure 알고리즘들을 사용하기 위한 절차라고 생각해 주시면 감사하겠습니다.

최대한, 꼼꼼하게, 그리고 환경 구축에 익숙하지 않은 분들도 따라하기 쉽게 구성하려고 노력하였으니 잘 읽어 보신다면 누구나 어렵지 않게 사용하실 수 있으실 것으로 생각됩니다.



1. 먼저 OpenMesh 공식 사이트에 접속합니다.
http://www.openmesh.org/index.php?id=222

2. 왼쪽의 Downloads 탭에 들어가면 OpenMesh 의 Latest Version 들을 다운로드 받을 수 있는 링크가 있는데, 소스코드를 담은 압축 파일들과 함께 pre-compile 된 바이너리 파일도 제공하고 있습니다. (일단 가장 간단하게, 이 바이너리 파일을 설치해서 사용하도록 하겠습니다.)

(아래는 바이너리 파일을 직접 다운로드 받을 수 있는 링크입니다.)
http://www.openmesh.org/fileadmin/openmesh-files/2.0RC3/OpenMesh-2.0-RC3.exe

3. 다운로드 받은 파일을 설치하면, C:\Program Files\OpenMesh 2.0 에 파일들이 설치됩니다.

4. VisualStudio 2008 을 실행시키고, 새로운 빈 프로젝트를 만들고, 빈 C++ 파일을 하나 만듭니다.
(안타깝게도 지금 설명하는 모든 과정들은 VS2005 에서는 잘 동작하지 않았습니다. 물론 OpenMesh 가 VS2005 와 호환되지 않는 것은 아니고, 사용자가 간편하게 사용하기 위해 제공되는 바이너리, 솔루션 파일들이 VS2008 버전이며, 저도 이에 맞추어 설명하고 있기 때문입니다. VS2005 에서 OpenMesh 를 쓰고 싶으신 분들은 위에 언급한 Compiling OpenMesh 페이지를 참고해 주십시오.)

5. 일단 VisualStudio 메뉴에서 도구>옵션에 들어가, 프로젝트 및 솔루션>VC++ 디렉터리 탭을 클릭합니다. 오른쪽 화면에서 '다음 파일의 디렉터리 표시' 드롭다운 메뉴에서 라이브러리 파일을 선택합니다. 여기에서 아까 설치했던 lib 폴더 경로를 추가해줍니다.

※ (C:\Program Files\OpenMesh 2.0\lib)



6. VisualStudio 메뉴의 프로젝트 > 속성 에 들어가서, C/C++ > 일반 탭 안에 있는 '추가 포함 디렉토리' 에 아까 설치했던 include 폴더 경로를 추가해 줍니다.

※ (C:\Program Files\OpenMesh 2.0\include)



7.  링커 > 입력 탭 안에 있는 '추가 종속성' 에 lib 폴더 안에 들어 있는 2개의 라이브러리, 즉 OpenMeshCore.libOpenMeshTools.lib 을 추가해 줍니다.



8. 다음, C/C++ > 전처리기 탭 안에 있는 '전처리기 정의' _USE_MATH_DEFINES 를 써 넣어줍니다.
(이 전처리기 부분에 대해서는 저도 명확히 파악하지는 못했습니다. 단지 컴파일할때 이 전처리기를 필요로 합니다.)




일단 끝!




Test

위와 같이 하면 일단 OpenMesh 라이브러리를 사용할 수 있는 기본적인 환경이 갖추어졌습니다.
OpenMesh 공식 사이트에서 기본으로 제공하는 튜토리얼 소스 코드를 시험삼아 컴파일 해 보아서 컴파일이 잘 되는지 확인해봅니다.

(좀 깨져 보이는 듯 해도 드래그->Copy & Paste 하는 데에는 문제가 없습니다.)




위 코드는 간단한 폴리곤 큐브를 하나 만들어보는 소스코드입니다. 일단은 '컴파일이 잘 되는 것' 만 확인하면 될 것 같습니다.
(Warning 이 많이 뜨는데 VS project DB 파일을 찾지 못한다는 것이므로 신경쓰지 않아도 됩니다.)

1. 성공적으로 컴파일 되었다면, 사용자가 설정한 VS 2008 프로젝트 폴더에 Debug 폴더를 열어봅니다. 프로젝트 이름으로 되어 있는 exe 파일이 생성되었을 것입니다.

2. exe 파일을 실행시켜 보면, output 이라는 이름으로 된 obj 파일이 생성됩니다.



3. Maya 를 실행시키고, 이 obj 파일을 불러들여봅니다. 성공적으로 폴리곤 큐브가 불러들여지면, OpenMesh 의 첫걸음을 성공적으로 뗀 것입니다.




+  추가적인 사항 ( .zip 파일을 다운로드해서 컴파일해 사용하는 방법)

바이너리를 다운로드 받지 않고, OpenMesh-2.0-RC3.zip 파일을 다운로드 받아보면 OpenMesh 의 모든 소스 코드를 제공받을 수 있습니다. 

(아래는 .zip 파일을 다운로드 받을 수 있는 링크입니다.)
http://www.openmesh.org/fileadmin/openmesh-files/2.0RC3/OpenMesh-2.0-RC3.zip

zip 파일 압축을 풀어보면 'VS2008OpenMesh.sln' 이란 이름의 Visual Studio 2008 솔루션 파일을 제공하고 있습니다. 



열어보면 Core, Tools, VS2008MConvert 이라는 3개의 프로젝트로 구성되어 있습니다. 일단 중요한 프로젝트는 Core, Tools 두 개의 프로젝트입니다.



이 프로젝트들을 빌드하면, zip 파일의 압축을 푼 폴더에 lib 라는 폴더가 생기고, 2개의 라이브러리 파일이 생기게 됩니다. 디버그 모드로 빌드하면 libOpenMeshCored.lib 와 libOpenMeshToolsd.lib 가 생기고, 릴리즈 모드로 빌드하면 libOpenMeshCore.lib 와 libOpenMeshTools.lib 가 생성됩니다.

그리고 사용자가 작업하게 될 프로젝트를 설정하는 방법은 이전과 비슷합니다. 

1. 새로운 프로젝트/솔루션을 만든 후, 압축을 푼 폴더의 lib 폴더 경로를 라이브러리 폴더로 등록해줍니다.
※ (...\OpenMesh-2.0-RC3\OpenMesh-2.0-RC3\lib)

2. 추가 포함 디렉터리 폴더는, 압축을 푼 폴더의 src 폴더를 포함시킵니다.
※ (...\OpenMesh-2.0-RC3\OpenMesh-2.0-RC3\src)

3. lib 파일 링크와 전처리기 선언은 위의 과정과 동일합니다.
(단, lib 파일을 링크할 때 사용자의 프로젝트가 디버그 모드일 때에는 디버그 모드로 빌드한 라이브러리 파일을, 릴리즈 모드일 때에는 릴리즈 모드로 빌드한 라이브러리 파일을 링크시켜줍니다.)





혹시라도 의문가는 점이나, 잘 되지 않는 부분이 있다면 즉시 리플로 말씀해 주시면 감사하겠습니다.

그리고 Documentation 을 제공하는데, Maya 의 훌륭한 Documentation 에 비교해서 많이 빈약한 모습에 아쉬움을 느꼈습니다. 일단 기본적인 튜토리얼을 보고 사용법을 익힌 후, Class 들을 뒤져가면서 기능을 익히는 방식으로 공부해 나가야 할 것 같습니다.


(OpenMesh Documentation)

http://openmesh.org/Documentation/OpenMesh-2.0RC3-Documentation/index.html 


ThEnd.