Game Development
-
[DirectX] 8. 카메라 제작Game Development/DirectX 2024. 9. 18. 20:07
이번 글에서는 카메라를 만들고, 카메라를 움직이는 것을 만들어보도록 하겠습니다. 카메라를 만들기 전에 저번 글에서 만들었던 Vertex Buffer와 Index Buffer를 적용해 보도록 하겠습니다. 먼저 InputLayout에 대한 클래스를 다시 정의하겠습니다.// InputLayout.h#pragma once#include #include using Microsoft::WRL::ComPtr;class InputLayout {public: bool Init(ID3D11Device* device, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3DBlob* vsBuffer); void Bind(ID3D11DeviceContext* deviceContext);pri..
-
[DirectX] 7. Vertex Buffer(버텍스 버퍼)/Index Buffer(인덱스 버퍼)Game Development/DirectX 2024. 9. 10. 08:53
이번 글에서는 Vertex Buffer와 Index Buffer에 대해서 알아보고, 구현해보도록하겠습니다. 먼저 VertexBuffer와 Index Buffer에 대해서 설명하자면,Vertex Buffer는 정점에 대한 정보들을 저장한 버퍼이고,Index Buffer는 Vertex Buffer에 있는 정점을 종류별로 인덱싱한 뒤, 인덱스 데이터를 보관하는 버퍼입니다. 그럼 이제 Vertex Buffer와 Index Buffer를 구현해보도록 하겠습니다.// VertexBuffer.h#pragma once#include #include using Microsoft::WRL::ComPtr;class VertexBuffer {public: bool Init(ID3D11Device* device, void* d..
-
[DirectX] 6. 3D 모델 띄우기Game Development/DirectX 2024. 9. 9. 11:36
이번 글에서는 3D 모델을 띄우고, 저번 글에서 한것 처럼 텍스처를 입혀보겠습니다. 그럼 먼저 3D 오브젝트를 불러오는 것 부터 만들어보도록 하겠습니다.저는 3D 오브젝트를 불러오기 위해서 Assimp라는 라이브러리를 사용할 것입니다. https://github.com/assimp/assimp/releases/tag/v5.0.0위의 링크로 들어가셔서 밑으로 쭉내리면 Zip 파일이 있을 것입니다.그걸 다운받으시고 압축을 푸시고 아래에 있는 것들을 따라하시면됩니다.https://cmake.org/download/에 들어가서 cmake라는 것을 다운로드 해줍니다.저는 Windows x64 Installer로 다운받았습니다.cmake를 열어줍니다. Where is the source code에 assimp 라이..
-
[DirectX] 5. 텍스처 입히기Game Development/DirectX 2024. 9. 8. 23:08
최근 프로젝트 마감이랑, 자격증, 대회 이런 것들이 겹치는 바람에 약 2달 동안 글을 쓰지못했습니다.이제 다 마무리 되었으니 오늘부터 다시 한번 글을 끄적여 볼까합니다. 이번 글에서는 저번 글에서 만든 삼각형에 텍스처를 입혀보도록 하겠습니다. 먼저 만들기 전에 텍스처링에 대해서 알아보겠습니다.텍스처링이란 3D 모델에 표면에 대한 정보와 색상 정보를 추가하여,3D 모델을 더 사실적이거나 양식화된 모습으로 만드는 과정입니다. 그리고 이번 글에서 할 삼각형에 텍스처를 입히는 것 또한 이 텍스처링의 과정입니다.그 이유는 바로 색상 정보를 추가하기 위해서 텍스처를 사용하기 때문입니다. 그럼 이제 텍스처를 어떻게 입히는 지를 알아보겠습니다.다음과 같은 정육면체와 텍스처가 있다고 하겠습니다. 이 정육면체에 텍스처를 ..
-
[DirectX] 4. 삼각형 띄우기Game Development/DirectX 2024. 6. 26. 18:14
이번 글에서는 삼각형을 한번 화면에 띄워 보도록 하겠습니다. 삼각형을 만들기 위해서는 메쉬를 표현하는 Mesh 클래스를 제작해야 합니다.여기서 메쉬는 오브젝트를 구성하는 정점들이 이루는 다각형의 집합입니다.이 메시를 통해서 오브젝트를 띄울 수 있기 때문에 Mesh 클래스를 먼저 제작하는 것입니다. Mesh는 결국 정점들에 의해 이루어져 있기 때문에정점을 표현하는 Vertex 클래스도 함께 제작하도록 하겠습니다.// Vertex.h#pragma onceclass Vertex {public: Vertex(); Vertex(float x, float y, float z); // 정점의 좌표 float x, y, z;};// Vertex.cpp#include "Vertex.h"Vertex::Vertex() : ..
-
[DirectX] 3-4. Matrix4 클래스 제작Game Development/DirectX 2024. 6. 21. 12:12
이번 글에서는 행렬 클래스인 Matrix4 클래스를 구현해 보도록 하겠습니다. Matrix4 클래스를 제작하기 전에 먼저 수학과 관련된 것들을 정의 해 놓을 Math 클래스를 만들도록 하겠습니다.// Math.h#pragma onceclass Math {public: // 파이값 static constexpr float PI = 3.14159265f; // 호도법으로 static constexpr float Deg2Rad = (PI / 180.0f); // 60분법으로 static constexpr float Rad2Deg = (180.0f / PI); // 실수 두 개의 내용 교환 static void Swap(float& left, float& right);};// Math.cpp#include "M..
-
[DirectX] 3-3. View 행렬, Projection 행렬Game Development/DirectX 2024. 6. 19. 19:34
이번 글에서는 변환 행렬인 View 행렬과 Projection 행렬에 대해서 알아보도록 하겠습니다. View 행렬View 행렬은 오브젝트를 world space에서 camera space로 변환하는 행렬입니다.여기서 view space는 카메라가 공간의 원점에 있고, 양의 z축을 바라보고 있는 좌표계입니다.그런데, 여기서 말하는 카메라는 실제로 게임 속에 존재하는 것이 아니라위치, 회전, 시야각, 렌더링 범위 같은 정보를 가지지만 실제로 존재하지 않는 오브젝트입니다. 게임들을 보면 유저가 조작하는 것에 따라서 실제로 카메라가 있는 것처럼 화면을 보여주는데,카메라가 존재하는 게 아니라면 어떻게 이런 게 가능한지 의문이 드실 것입니다.이것의 답은 공간 자체를 이동시키면서 카메라가 있는 것처럼 효과를 주는 것..
-
[DirectX] 3-2. World 행렬Game Development/DirectX 2024. 6. 17. 20:27
이번 글에 작성할 것은 변환 행렬 중 하나인 World 행렬입니다. 변환 행렬은 벡터나 점의 집합에 대한 변환을 수행하는 행렬입니다.이 변환 행렬을 통해서 오브젝트의 공간을 바꿔가면서 3차원 공간을 2차원 스크린에 나타낼 수 있습니다. 오브젝트들은 각 오브젝트 고유의 공간인 local space를 가지고 있습니다.이 공간은 오브젝트의 중심을 원점으로 하는 공간입니다. 하지만 이런 오브젝트들을 게임에 보여주기 위해서는 오브젝트들이 배치될 게임 상의 공간이 필요한데,이 공간을 world space라고 하며, world space에는 공간의 원점을 기준으로 오브젝트에 위치, 회전, 크기 정보를 추가하여 오브젝트를 배치하게 됩니다. 이렇게 오브젝트를 world space에 배치하기 위해서는local space..