3. 스킨 렌더링
목표 :
스킨을 로드하는 법을 알아본다.
각종 폴더 설정에 대해 알아본다.
스킨을 통해 오브젝트를 생성하는법을 알아본다.
생성된 오브젝트를 갱신하여 엔진에 렌더링을 요청하는법을 알아본다.
결과 :
스킨오브젝트를 생성후 렌더링 한다.
1> 스킨을 위한 HANDLE 과 오브젝트를 위한 HANDLE 을 선언한다.
;EPPHANDLE 은 엔진 전반에 걸쳐 사용되는 HANDLE 이다. 모든 오브젝트의 접근은 EPPHANDLE 를 통해
접근된다. 이번 예제에서는 간단하게 전역변수로써 두 변수를 선언 하였다.
EPPHANDLE g_hSkin = INVALID_HANDLE;
EPPHANDLE g_hObject = INVALID_HANDLE;
2> 리소스 로드를 위하여 init_once 라는 함수를 하나 생성한다.
; init_once 함수는 초기 엔진을 생성할때 한번만 호출되도록 한다.
3> 각종 리소스의 폴더들을 설정한다.
; 위에서 정의한 init_once 폴어 안쪽에 설정 한다.
char szCurrentPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szCurrentPath);
// game res path
g_engine_core.set_directory_game_path(GAME_DIR_PATH_BASE, szCurrentPath);
g_engine_core.set_directory_game_path(GAME_DIR_PATH_OBJECT, "resource\\object\\");
g_engine_core.set_directory_game_path(GAME_DIR_PATH_SKIN, "resource\\skin\\");
// device res path
g_engine_core.set_directory_display_path(DIR_PATH_TEXTURE, "resource\\texture\\");
g_engine_core.set_directory_display_path(DIR_PATH_RENDER_METHOD, "resource\\rendermethod\\");
4> 스킨을 load 한다.
; 위의 init_once 함수의 아래쪽에 아래와 같은 코드를 삽입하자.
EPPHANDLE g_hSkin = g_engine_core.load_object_skin( "주전자.eoj" );
if( g_hSkin == INVALID_HANDLE) return false;
return true;
5> load 된 스킨을 활용해 오브젝트를 생성한다.
; 위의 init_once 함수의 아래쪽에 아래와 같은 코드를 삽입하자.
if(g_hSkin != INVALID_HANDLE)
g_hObject = g_engine_core.create_object(g_hSkin)
if(g_hObject == INVALID_HANDLE)
return false;
return true;
6> 생성된 오브젝트를 갱신한다.
; 아래 함수는 매프레임 호출되어져야 한다. process 함수 아래쪽에 삽입한다.
g_engine_core.update_object( g_hObject, &matrix);
7> 생성된 오브젝트와 로드된 skin 을 제거 한다.
; 리소스를 먼저 release 한 후, 오브젝트를 제거한다.
if(g_hSkin != INVALID_HANDLE) g_engine_core.release_object_skin(g_hSkin);
if(g_hObject != INVALID_HANDLE) g_engine_core.destroy_object(g_hObject);
8> 갱신된 오브젝트는 자동적으로 렌더링 된다.
Download
epp_engine_skin_rendering.cpp
* PARAMETER
void set_directory_game_path(eGAME_RESOURCE_PATH p_ePath, char* p_szRelativePath);
void set_directory_display_path(eDISPLAY_RESOURCE_PATH p_ePath, char* p_szRelativePath);
EPPHANDLE load_object_skin(char* p_szFilename, uint16 p_uiPriority = 0xffff);
EPPHANDLE create_object(EPPHANDLE p_hObject, uint16 p_uiPriority = 0xffff);
void update_object(EPPHANDLE p_hObject, EPP_MATRIX* p_pMat = NULL);
