목표 : 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 강형엽 교수님 강의의 실습 수업을 수강하며 정리한 내용입니다.
'DX11' 카테고리의 다른 글
| [DX11] 3D 렌더링 엔진 만들기 (3) - Graphics Pipeline (0) | 2026.04.13 |
|---|---|
| [DX11] 3D 렌더링 엔진 만들기 (2) - Window/D3D Initializaiton (0) | 2026.04.13 |