Xcode에 assimp 올리기
ProgrammingOpenGL 3D 모델 관련 코드를 연습해보다가 웹에 공유된 모델 데이터를 코드로 읽어들이는 작업이 필요하게 되었다. 참고하고 있는 문서에서는 assimp 외부 라이브러리를 사용하고 있었는데, 윈도우 기반으로 설명하고 있어서 Xcode에 적용하는 방법은 직접 알아낼 수 밖에 없었다. 이 포스트에서는 Xcode에 MacOS용 assimp를 적용하는 방법을 정리한다.
아래는 assimp 라이브러리를 사용하여 nanosuit.obj 를 읽어들여 렌더링한 결과이다. 텍스처는 아직 연결하지 못했다.
한편, 애플은 ModelIO 라는 API를 제공하고 있었는데 나한테는 assimp보다 사용성이 직관적이지 않고 이해하고 적용하기까지 많은 시간이 걸리는 듯 하여 포기했다.
Assimp 다운로드
assimp 페이지를 방문하여 코드를 다운로드 받는다. 나는 최신 버전을 git으로 받았다.
git clone git://github.com/assimp/assimp.git
Cmake 설치
Assimp를 빌드하려면 Cmake를 설치해야 한다. GUI버전을 다운로드 받아도 될지 모르겠지만, 나는 brew를 사용하여 설치했다.
brew install cmake
Assimp 빌드
여기서부터 좀 삽질을 했었는데, 그냥 Cmake를 돌리면 컴파일러가 지정되어 있지 않다는 등 알 수 없는 에러가 나온다. 아래는 assimp 소스 폴더에서 cmake CMakeLists.txt -G "Xcode" 를 실행했을 때 나왔던 에러이다.
-- The C compiler identification is unknown -- The CXX compiler identification is unknown CMake Error at CMakeLists.txt:38 (PROJECT): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:38 (PROJECT): No CMAKE_CXX_COMPILER could be found. -- Configuring incomplete, errors occurred! See also "/Users/koodev/Workspace/Source/assimp/CMakeFiles/CMakeOutput.log". See also "/Users/koodev/Workspace/Source/assimp/CMakeFiles/CMakeError.log".
GUI 버전의 Cmake를 돌려도 비슷한 에러가 뜬다. 나한테 유효했던 해결책은 아래와 같이 xcode-select 로 developer tool의 기준이 되는 경로를 지정해 주는 것이다. 이 방법을 알아내는데 참고한 사이트는 다음과 같다: https://github.com/nodejs/node-gyp/issues/569#issuecomment-255589932
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer cmake CMakeLists.txt -G "Xcode"
그러면 한동안 빌드가 돌아가고 Assimp.xcodeproj 도 나온다. 내 Mac에 Xcode는 한번밖에 설치한 적이 없을텐데 왜 이게 문제가 되었는진 모르겠다. 힘들게 빌드는 했지만 잘 이후에도 큰 난관이 2개나 더 있었다.
프로젝트에 Assimp 가져오기
Xcode에 외부 라이브러리를 추가하는 방법은 두 가지 정도가 될 수 있을 것 같다. 하나는 해당 라이브러리를 Sub Projext로 구성하는 것이고, 다른 하나는 직접 라이브러리 파일을 추가하는 것이다. 앞의 방식을 사용하면 디버깅을 할 수 있다는 장점이 있다. (뭐가 쉬울까) 고민 끝에 나는 뒤의 방식으로 진행했다.
우선 프로젝트 루트 폴더 밑에 assimp라는 폴더를 만들고 여기에 assimp 소스의 include 폴더와 lib/Debug 폴더를 가져와 아래와 같이 구성한다. lib 폴더에 assimp의 lib/Debug 안에 있는 .a파일과 링크들을 넣었다.
. ├── OpenGLScratch ├── OpenGLScratch.xcodeproj └── assimp ├── include │ └── assimp │ ├── Compiler │ └── port │ └── AndroidJNI └── lib
그리고 Finder를 열어 assimp 폴더를 Xcode로 그래그하여 옮긴다. 아래와 같은 상태로 만드는 것이다.
프로젝트의 Build Phases - Link Binary With Libraries로 가보면 Xcode가 친절하게도 방금 전에 추가한 라이브러리들을 링크하게 설정해 놓았다.
그치만 헤더 파일의 경로는 자동으로 잡아주지 않기 때문에 이것을 직접 해 주어야 한다. Build Settings - Header Search Paths 에 있다.
끝?
이제 프로젝트에서 assimp라는 외부 라이브러리를 사용할 수 있는 상태가 된 것이다. 하지만 코드에서 assimp를 쓰기 위해서 해야 할 일이 좀 더 있다. assimp 인터페이스가 C++ 이기 때문에 Objective-C++ 로 wrapper 인터페이스를 만들어야하고, Swift를 사용할 경우에는 Bridging Header에 새로 만든 wrapper 헤더를 넣어주어야 한다.
참고
'Programming' 카테고리의 다른 글
How to terminate a background process (0) | 2018.04.24 |
---|---|
macOS에 emacs ggtags 설치 및 설정 (0) | 2017.10.17 |
OpenGL로 원 그리기 (1) | 2017.05.27 |
Swift3 - result unused warning 없애기 (0) | 2017.05.23 |
Swift - 튜플에 포인터로 접근하기 (0) | 2017.05.14 |