(DirectX : Basic) 1. Set Project

Posted by : at

Category : DirectX


우선 간단히 렌더링 파이프라인에 대해 설명

  • Input-Assembler Stage : 정점정보(삼각형이 어떠한 좌표에 있는지)를 관리
  • Vertex Shader Stage : 정점정보를 연산(좌표이동 등)
  • Tessellation Stage : 새로운 정점을 계산(경우에 따라 정점이 추가/제거되어야 할 필요가 있음(Ex> 멀리있는 산의 표현))
  • Geometry Shader Stage : 새로운 정점을 계산
  • Rasterize Stage : 여기부터 색상을 입힌다, 정점의 색상 정보 관리(A, B점으로 가며 색상을 어떻게 변경하는지 정점간 선을 어떻게 그을지 등)
  • Pixel Shader Stage : 색상을 넣는다
  • Output-Merger Stage : 모든 색상을 조합

일단 이런게 있다고만 알고 있자.


VS2019로 실행할 것.


프로젝트 만들기

Windows 데스크톱 애플리케이션

메시지 루프 구조를 변경한다.

    // 기본 메시지 루프입니다:
    while (true)
    {
        // 메시지가 들어올때만 받는게 아니라 있는지를 체크후 꺼내는 형태로 변경
        if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;

            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }

        // TODO : 게임로직
    }

미리 컴파일된 헤더를 사용하게 변경

// pch.h
#pragma once

#include <vector>
#include <memory>
using namespace std;

Game class 만들기

#pragma once
class Game
{
public:
	void Init();
	void Update();
};
#include "pch.h"
#include "Game.h"

void Game::Init()
{
}

void Game::Update()
{
}

Game을 주기적 호출

    MSG msg;

    //Game* game = new Game();
    unique_ptr<Game> game = make_unique<Game>();
    game->Init();

    // 기본 메시지 루프입니다:
    while (true)
    {
        if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;

            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }

        // TODO : 게임로직
        game->Update();
    }

Direct 라이브러리를 관리하는 프로젝트를 하나 더 생성

정적라이브러리로 생성

  • d3dx12.h(MS에서 제공하는 라이브러리기능 모음)를 추가
  • 미리 컴파일된 헤더에 아래를 추가
#pragma once

// 각종 include
#include <windows.h>
#include <tchar.h>
#include <memory>
#include <string>
#include <vector>
#include <array>
#include <list>
#include <map>
using namespace std;

#include "d3dx12.h"
#include <d3d12.h>
#include <wrl.h>
#include <d3dcompiler.h>
#include <dxgi.h>
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
#include <DirectXColors.h>
using namespace DirectX;
using namespace DirectX::PackedVector;
using namespace Microsoft::WRL;

// 각종 lib
#pragma comment(lib, "d3d12")
#pragma comment(lib, "dxgi")
#pragma comment(lib, "dxguid")
#pragma comment(lib, "d3dcompiler")

// 각종 typedef
using int8		= __int8;
using int16		= __int16;
using int32		= __int32;
using int64		= __int64;
using uint8		= unsigned __int8;
using uint16	= unsigned __int16;
using uint32	= unsigned __int32;
using uint64	= unsigned __int64;
using Vec2		= XMFLOAT2;
using Vec3		= XMFLOAT3;
using Vec4		= XMFLOAT4;
using Matrix	= XMMATRIX;

void HelloEngine();


About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links