HAM Engine
Library Engine for Developer 3D/2D Game(C++).
Made by Kernys(하앙e/jenycany@hanmir.com)
1. 햄 엔진 소개
햄 엔진은 쉬운 프로그래밍을 위해 DirectX의 기능을 적극 활용하여 한층 더 감싼 라이브러리 입니다.
이 엔진은 메시 출력 및 그림 파일 출력을 간단히 할 수 있으며, 이를 활용하면 좋은 게임을 제작할 수 있을 것 입니다.
1. 햄 엔진 작동 환경 및 설치
햄 엔진은 Visual Studio .NET 2003 이상의 환경(그리고 DirectX SDK가 설치가 되어있어야 합니다.) 에서 작동하고, 16개의 파일로 이루어져있으며, 프로젝트 폴더에 이 파일들을 모두 넣고 다음의 과정을 통해 쉽게 사용하실 수 있습니다.
- 솔루션 탐색기에서 자신의 프로젝트를 선택하고 오른쪽 버튼, 그리고 속성(R)에 들어갑니다.
- 그 후에 왼쪽 폴더에서 '링커' 폴더로 들어간 후에 입력을 선택한 다음 추가 종속성에서 맨 마지막에 한칸을 띄우고 'Ham_Engine.lib' 이라고 적습니다.
- 그리고 확인을 눌러 다시 원래 상태로 돌아옵니다.
그 이후에 프로젝트에 사용할 헤더 파일을 만든 후에 헤더 파일 제일 위에 다음의 소스를 넣습니다.
#include <winsock2.h> // 네트워킹을 위한 환경 지원
#include <d3d9.h> // D3D 환경 지원
#include <d3dx9.h> // D3DX 환경 지원
#include "StdAfx.h" // 엔진과 연결
#include <windows.h> // 윈도우즈 환경과 연결
using namespace Ham; // 햄엔진의 네임 스페이스를 사용할 것을 정의
class CApp : public Ham::System::CHam_Engine { // 메인 어플리케이션 클래스
public:
BOOL Initialize(char *pWindowName,char *ClassName,int iWidth,int iHeight,int iXPos,int YPos,DWORD Style,int CursorNum,int IconNum,float fFrameSkip = 50.0f);
BOOL DoEvents(float Delta,float fFrame);
};
이로써 간단한 메인 어플리케이션 클래스의 뼈대를 작성했습니다.
그리고 이제 헤더 파일에서의 할일은 끝났고, 소스 파일로 이동합니다.
소스 파일에서는 다음의 소스를 기본적으로 삽입합니다.
#include "WinMain.h"
CApp g_App; // 메인 어플리케이션 객체
Graphic::CGraphics g_Graphic; // Direct3D 객체
int main() {
puts("프로그램 초기화를 시작합니다.");
g_App.Initialize("ProgramClass","Hello!! Ham Engine World!!!",800,600,100,100,WS_OVERLAPPED | WS_SYSMENU,0,0); // 프로그램 초기화
g_App.Execute(); // 프로그램 시작
g_App.Release(); // 프로그램 소멸
return 0;
}
BOOL CApp::Initialize(char *pWindowName,char *ClassName,int iWidth,int iHeight,int iXPos,int YPos,DWORD Style,int CursorNum,int IconNum,float fFrameSkip /* = 50.0f */) { // 프로그램의 초기화 루틴
if(CHam_Engine::Initialize(pWindowName,ClassName,iWidth,iHeight,iXPos,YPos,Style,CursorNum,IconNum,0.0f)) {
if(!g_Graphic.Initialize(this,NULL,TRUE,TRUE,D3DFMT_D16)) return FALSE;
// 이곳에 초기화 할 값이나 정보를 삽입해주세요
return TRUE; // 프로그램 초기화 완료
}
return FALSE;
}
BOOL CApp::DoEvents(float Delta,float fFrame) {
LPDIRECT3DDEVICE9 pDevice = g_Graphic.GetD3Device(); // 본래의 Direct3D 객체를 얻음
pDevice->Clear(0,0,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),1.0f,0); // 하얀색으로 화면 전체를 지움
if(g_Graphic.BeginScene()) // 화면의 녹화 시작
{ // 이 안에 있는 내용 물은 모두 녹화(렌더링) 됩니다.
g_Graphic.EndScene(); // 화면의 녹화 종료
}
g_Graphic.Present(); // 현재까지 녹화한것을 출력
}
이제 간단한 하얀창을 띄우기에 성공했습니다. 이제는 우리가 이 화면에 무엇을 그려야 합니다.
그래서 이제부터 간단한 예제인 그림 파일 띄우기를 해보겠습니다. 출력할때 필요한 파일을 하나 준비해주세요.
그리고 다음에 지시에 따라 소스코드에 써 넣습니다
WinMain.cpp(소스 파일)에 있는 맨 윗줄부분인
Graphic::CGraphics g_Graphic; // Direct3D 객체
부분 밑에
Graphic::CTexture g_Texture; // 텍스쳐(3D 환경에서의 이미지) 객체
를 써 넣습니다.
그리고 나서 아까 Initialize 함수에서 다음
// 이곳에 초기화 할 값이나 정보를 삽입해주세요
부분 밑에
Texture.Initialize(&g_Graphic,"test.bmp" /* 파일 이름 */); // 텍스쳐의 초기화
이것을 넣어주십시오.
그리고 나서 방금전에 나온
if(g_Graphic.BeginScene()) // 화면의 녹화 시작
{ // 이 안에 있는 내용 물은 모두 녹화(렌더링) 됩니다.
g_Graphic.EndScene(); // 화면의 녹화 종료
}
부분 사이에
Texture.Blit(0,0,0,0);
를 넣어주십시오.
그리고 다시 컴파일을 하시면 창에 왼쪽 상단에 그림이 하나 뜰 것 입니다.
이제 Blit 함수의 인수에 대해 알아봅시다.
우리가 사용한 Blit 함수의 인수는 다음과 같이 되어있습니다. ( 원래 기본 인수도 있지만 여기서는 초보적 설명이므로, 제외 하겠습니다. )
BOOL Blit(float DestX,float DestY,long SrcX,long SrcY); // 텍스쳐 블리트
여기서 DestX와 DestY는 화면에 어디 위치에 출력할지를 입력해주는 곳 입니다.
제가 0,0,에서 쓴것은 화면의 제일 왼쪽 상단에 출력하라는 의미이지요.
그리고 SrcX와 SrcY는 그림의 어디 부분부터 출력할지 입력하는 곳 입니다.
이제 간단히 여기 까지 알아보았습니다.
아직은 햄엔진의 1% 기능 밖에 사용하지 못했지만, 앞으로도 많은 기능을 소개하여 100%까지 끌어 올리도록 하겠습니다 ^^
읽어주셔서 감사합니다
Thanks for reading my lecture