프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 밥을먹는선비

안녕하세요 도플광어입니다.

저는 주로 일리히트엔진 하나를 가지고 극한까지(분자단위까지 ^^;) 해부해보도록 하겠습니다. 

그렇지만...
타엔진과의 비교하여 성능에 대한 언급은 되도록 피할예정입니다. 예를 들면 공군 조종사가 쓰는 연습기와 실제 전투기와의 성능 을 비교하는 일은 어리석은 일이라는 생각입니다. 

아카데믹한 방향으로 포스팅을 진행하도록 하겠습니다. 성능을 떠나서 하나의 엔진을 끝까지 분석 해보는 것은 의미 있는 일이라고 봅니다.(그렇다고 일리히트엔진이 공부용 전용 엔진이라는 건 아닙니다. ^^ 충분히 실용적입니다.)

먼저 일리히트 엔진을 간단히 설명하자면...

The Irrlicht Engine is an open source high performance realtime 3D engine written and usable in C++. It is completely cross-platform, using D3D, OpenGL and its own software renderers.

위 설명과 같이 c++기반의 클로스 플랫폼 실시간 3디 랜더 엔진 입니다. 독일산 엔진입니다.(정확히 말하자면 원저자는 오스트리아 분입니다.)

현재 일리히트엔진은 1.7.2가 최신버전입니다만  svn 에 1.8beta 버전이 준비중에 있습니다. 오늘(2011.12.21)은 여기서 최신버전을 받아서 (rev 4020) 진행 하도록 하겠습니다.


그리고 저는 ms기술에 대한 거부감때문에 되도록 ms 기술(특히 VS2010 , DX, .Net)에 대한 언급은 피하도록 하겠습니다. 물론 제가 맞다 잘못됐다를 떠나서 다양한 방향을 추구하는 사람은 소수라도 존재해야된다는 생각입니다. 맥에서 작업을 하는것을 기본으로 하겠지만 되도록 플랫폼에 종속되는 않는 방법을 사용하도록 노력하겠습니다.

https://irrlicht.svn.sourceforge.net/svnroot/irrlicht

svn 클라이언트등를 이용해서 여기서 소스 코드를 끌어 옵니다.
( 참고로 svn 클라이언트는  svnx 를 사용했습니다. [사용법 바로 가기] )

컴파일 환경은 아래와 같습니다.




xcode 4.2.1
Max OSX 10.7.2


먼저 xcode로 'trunk/source/irrlicht/macosx/MacOSX.xcodeproj' 을 오픈합니다.

그리고 몇가지 프로잭트 설정을 해주어야 합니다.

trunk/include/irrCompileConfig.h 헤더파일에는 컴파일시 플랫폼에따라 선택적으로 컴파일 가능하도록 하는 매크로 설정을 바꿔 줄수가 있습니다.
예를 들어 DX 설정이 맥이나 리눅스에서는 적용되지 않도록 되어 있는 부분이 아래와 같이 구성되어있습니다.


엔진 기능별로 선택적으로 빼고 넣을수도 있습니다.


 예를들어 _IRR_COMPILE_WITH_GUI_ 부분을 주석처리 하면 내장 유아이 관련된 부분이 컴파일되지않습니다. 외부 유아이 엔진을 사용할경우에는 이런식으로 엔진을 가볍게 다이어트 할수가 있습니다.

엔진의 모든 기능을 단위별로 묶어 놓았기 때문에 처음 엔진을 분석하실때 이것을 참고 해서 단위별로 나눠서 분석하시는것도 방법입니다.(독일사람들이 정리 정돈을 참깔끔하게 잘한다는 느낌이 드는 부분입니다.)

현재 맥에서 컴파일 하려면 몇가지를 수정하고 하셔야합니다.




1. 프레임버퍼 비활성화



COpenglExtensionHandler.h 헤더 파일에 위와 같이  #undef GL_ARB_framebuffer_object 추가 해줍니다. 그렇지않으면 프레임 버퍼 관련한 함수들이 정의가 되지않았다고 에러가 나옵니다.
포럼에서 이 문제를 물어보니 이 부분 담당하시는 분이 자기는 엑스코드3 쓰는데 너도 그거 써라 이렇게 말씀을 하시더군요^^;  


2. MACOSX 64비트 문제

COpenglExtensionHandler.h 의 2325줄을 아래와같이 size_t로 타입 캐스팅해줍니다.



COpenGLMatrialRenderer.cpp 의 내용을 아래와 같이 수정해줍니다.



3. 가상키 선언 주석처리 



CirrDeviceMacOSX.mm 파일에서 virtual keybord를 열거형으로 선언되어있는것들을 모두 주석 처리합니다. 10.7 sdk 부터는 똑같은 이름으로 내부프레임워크에 들어가있기 때문에 이름이 서로 충돌하게 됩니다.




4. 빌드 세팅


Architectures -> Standard
Base SDK-> Latest MacOSX

Build Options->Compiler for c/c++/object-c-> LLVM GCC4.2




libirrlicht.a 선택을 하고 빌드를 합니다.

 


컴파일이 성공적이라면 결과파일인 libirrlicht.a는 MacOSX/build/debug에 위치합니다.



다음부터는 본격적으로 하나하니씩 기능별로 분석을 해나가도록 하겠습니다.




ps.
wondows의 경우는 source/ 에있는 .sln 프로잭트를 열어서 vs를 이용해서 컴파일하면 별문제 없이 컴파일이 됩니다. 이건 별다른 설명 필요없이 간단합니다. 좀 허무 하죠 ㅡ.ㅡ? 그랬다면 죄송합니다.






 

댓글을 달아 주세요

  1. Favicon of https://gamedevforever.com 김포프 2011.12.21 03:48 신고  댓글주소  수정/삭제  댓글쓰기

    오오~ 기대하겠습니다! 참고로 '도플광어'란 태그를 글에 추가했습니다. 필자별 검색을 위해 태그를 쓰고 있다죠. 다음편 올리실때부터 직접 추가해주세요 ^^

  2. 디치리 2011.12.21 09:13  댓글주소  수정/삭제  댓글쓰기

    평소 관심은 있었지만, 게으름으로 못보고 있었는데, 많은 도움이 될것같습니다. 잘읽었습니다.

  3. 김용준 2011.12.21 09:46  댓글주소  수정/삭제  댓글쓰기

    광어오빠~ 달료~~

  4. Adolys 2011.12.21 10:49  댓글주소  수정/삭제  댓글쓰기

    오~ 일리히트 엔진 분석을 다뤄주신다니 너무 기대되네요^^

  5. Favicon of http://Junios.net Junios 2011.12.21 14:19  댓글주소  수정/삭제  댓글쓰기

    잘 보고 갑니다. 예전에 네이버 카페에서도 많이 봤었는데.

  6. Favicon of https://gamedevforever.com ozlael 2011.12.21 17:22 신고  댓글주소  수정/삭제  댓글쓰기

    윈도우에서하면 모든게 만사 ok군요

  7. Favicon of https://gamedevforever.com 친절한티스 2011.12.21 17:26 신고  댓글주소  수정/삭제  댓글쓰기

    기대 되는 연재입니다~

  8. Favicon of https://gamedevforever.com 김포프 2011.12.22 07:32 신고  댓글주소  수정/삭제  댓글쓰기

    생각해보니 이 블로그에는 의학자료(해부학)도 올라오는군요.. 참 폭넓은 자료를.......(맞는다 -_-)

  9. Favicon of https://gamedevforever.com zinzza 2011.12.22 19:33 신고  댓글주소  수정/삭제  댓글쓰기

    아 웃겨요... 마지막 반전이 끝장이네요... 웃겨서 눈물이...ㅜㅜ

    • 도플광어 2011.12.22 20:44  댓글주소  수정/삭제

      반전은 계속 이어질겁니다 쭈욱~..기대 하셔도 좋습니다
      ㅡ.ㅡ;;;

  10. Favicon of http://www.ahappydeal.com/product-75325.html jxd a1000 2012.07.18 15:09  댓글주소  수정/삭제  댓글쓰기

    당신의 기사는 그들의 프로젝트에서이 문제에 대해 직시해야 독자들에게 좋은 그것은 그들에게 당신의 게시물에 대한 많은 고맙습니다 도움이 될 수 있습니다!