목표 : 3D 렌더링 엔진 만들기

  • Windlow Initialization / D3D Initialization
  • Support System
  • Cameras / Renderer
  • Models
  • Materials / Lights
  • Etc…

 

 

 

폴더 구조

  • Library Project : 일반적인 렌더링 엔진 구조, 게임에서 공통되게 사용하는 기능들 구현
  • Game Project : 어플리케이션에 따라 구체적인 기능들 구현

 

 

 

 

Window란? 

  • Application window 또는 Main window라고 불란다.
  • Frame 구성은 다음과 같다.
    • Title bar / Minimize, Maximize button / Other standard UI
  • Frame 안에 영역을 Client Area 라고 한다. 
  • OK 버튼이나 EditBox들도 Window의 한 종류이다. 

 

 

 

 

 

Parent Windows & Owner Windows

  • UI control window는 application window의 자식 관계이다.
  • Parent window는 Child window에게 좌표계를 제공하기 때문에 child는 parent의 좌표계 영역 밖에서 나타나지 않는다.
  • 새로운 window 알림 창이 나타나는 경우를 dialog라고 한다. 

 

 

 

Window Handles

  • Windows들은 object지만 C++의 class는 아니다.
  • 특정 Window를 나타내기 위해서 handle이라는 변수를 사용한다. 이때 Handle이란 OS가 object를 구분하기 위한 ID 숫자값이다. (포인터가 아니라 단순한 숫자임)
  • Window handle의 자료형은 HWND를 사용한다.

 

 

 

Screen & Window Coordinates

  • 컴퓨터 상에서 좌표계는 pixel 값에 따른다.
  • 기준에 따라 다음과 같이 3개의 좌표계가 존재한다.
    • Screen/Window/Client 좌표계
  • 모든 좌표계는 좌상단 점을 원점으로 한다.

 

 

 

 

WinMain

◇  모든 window 프로그램은 WinMain이라는 entry-point가 있다. 

  • C/C++에서 in main 함수와 같은 역할이다.

  • hInstance : handle to an instance라고 불리며 OS가 이 값을 이용해서 해당 프로그램이 메모리에 로드될 때 EXE파일의 ID를 구분하게 된다. Handle이기 때문에 포인터가 아닌 정수값이다. 
  • hPrevInstance : 지금은 중요하지 않은 값. 항상 0으로 사용할 것이다.
  • pCmdLind : command-lind argument를 Unicode로 인코딩된 string으로 가진다. 
  • pCmdShow : min applicaiton이 minimize/maximize/일반 중 어떤식으로 보여줄 지 나타내는 flag값
  • Return 값 : int (C/C++과 동일하게 프로그램의 상태를 나타내는 값이다.)

 

 

 

Game::Main.cpp - 전처리

UNICODE를 사용해 빌드하기 위해 전처리로 매크로 정의를 해준다.

그리고 Windows desktop 프로그램은 <windows.h>를 include 해야한다. 

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>

 

 

 

 

Game::Main.cpp - wWinMain

기본적으로 사용되는 엔진구조는 아래와 같다. 

  • Initialization : 어플리케이션이 시작하면서 초기화한다. 필요한 에셋과 데이터를 로드하고 메모리 할당과 같은 초기화 작업을 진행한다.
  • Game Loop : 사용자의 입력의 받아 게임 로직을 수행하고, 이를 렌더링한다.
  • Destruction : 게임이 종료되면 메모리 해제와 같은 Destroy 과정을 거치며 종료한다. 
INT WINAPI wWinMain(
    _In_		HINSTANCE hInstance,
    _Int_opt 	HINSTANCE hPrevInstance,
    _In_		LPWSTR IpCmdLine,
    _In_		INT nCmdShow)
{
	// Initialization
    
    while(! /* is game terminated condition set? */)
    {
    	// Handle Input
        // Update (Game Logic)
        // Draw
    }
    
    // Destroy
    
    return 0;
}

 

wWinMain의 매개변수도 간단히 설명하자면,,

  • _In_ : 호출된 함수에 전달되고, 읽기 전용으로 취급
  • _Out_ : 호출된 함수가 쓸 공간만 제공. 호출된 함수는 해당 공간에 데이터를 쓴다..
  • _In_opt_ : _In_과 같으며, 매개변수가 선택 사항임을 나타낸다. 

 

 

 

 

다음에는 이어서 Window 초기화와 D3D 초기화에 대해 알아보겠다.

 

 

Reference KHU 강형엽 교수님 강의의 실습 수업을 수강하며 정리한 내용입니다.

+ Recent posts