책에서 제시하는 몇 가지 수학 개념들이 있다.

Vector, Matrix, Transform이 있는데 학교에서 흔히 접하는 내용들이기는 하나, 

용어적인 부분에서 낯설 수 있다.

때문에 여기서는 매우매우 기초적인 개념을 제외한 부분들을 용어 설명 위주로 풀어나가고자 한다.

 

Coordinate System(좌표계)

 

Left-Handed Coordinate System(left), Right-Handed Coordinate System(Right)

Left-handed Coordinate System(왼손 좌표계) - 왼손 엄지, 검지, 중지 손가락이 서로 수직이 되도록 폈을 때,
엄지 손가락이 X축, 검지 손가락이 Y축, 중지 손가락이 Z축을 가르킨다.

 

Right-Handed Coordinate System(오른손 좌표계) - 왼손 엄지, 검지, 중지 손가락이 서로 수직이 되도록 폈을 때, 
엄지 손가락이 X축, 검지 손가락이 Y축, 중지 손가락이 Z축을 가르킨다.

 

Unit Vector(단위 벡터) - 주어진 Vector를 크기(Magnitude)를 1로 맞춘 Vector.

Vector의 순수한 방향을 나타내는 용도로 사용된다.

반대로 Vector u의 크기를 나타낼 때는 ||u||라고 표시한다.

 

Normalization(정규화) - Vector를 Unit Vector로 만드는 작업.

 

Dot Product

Dot Product(= Inner Product, Scalar Product)(내적) - 동일한 차원에 존재하는 두 Vector의 성분들을 곱한 뒤 합산.
Dot Product 한 값은 두 Vector의 크기와 그 사이 각의 cos 값의 곱과 동일하다.

때문에 사이각을 구하는 데에 매우 유용하게 사용된다.

 

Vector V를 Vector n에 대해 Orthgonal Projection 한 P

Orthogonal Projection(직교투영, 정사영) - 어떤 Vector에서 특정 Vector 성분을 분리하는 작업.

위 식에서, P는 Vector V에 대해 Vector n 성분. 즉, n과 같은 방향(Direction)을 가진 Vector를 나타낸 것이다.

이와 같이 Vector V에 대해서 Vector n에 대한 성분인 Vector P를 구하는 것을 Orthogonal Proejction이라 한다.

V에서 P를 뺀 나머지. 즉 P와 수직인 V의 성분은 Prep(Perpendicular[수직의])으로 표현한다.

 

Orthonomal(직교의) - 주어진 Vector들이 서로 수직인 상태를 가르킨다.

 

Orthonomal group(정규집교 집합) - 어떤 Vector group에 속한 모든 Vector들이 서로 Orthonomal한 상태.

흔히 볼 수 있는 Orthonomal group은 어떤 Vector를 X, Y, Z축에 대해 Orthogonal Projection 한 결과들의 집합이다.

 

Orthogonalization(직교화) - Orthonomal 하지 않은 Vector group을 Orthonomal group으로 만드는 과정.

 

Gram-Schmidt Orthogonalization

Gram-Schmidt Orthogonalization(그람-슈미트 직교화) - n개의 Vector group을 Orthogonalization 하는 방법

 

Cross Product

Cross Product(=Outer Product)(외적) - 두 Vector에 대해서 모두 직교인 Vector를 구하는 작업.

이 연산은 두 개의 축을 알고 있을 때 나머지 하나의 축을 구하는데 매우 유용하다.

Cross Product는 연산한 Vector 순서에 따라 적용되는 Coordinate System의 방향을 따라 간다.

즉, Left-Handed라면 Cross Product 결과도 Left-Handed, Right-Handed라면 Product 결과 역시 Right-Handed이다.
2차원에서는 Cross Product가 존재하지 않는다.

하지만 유사 외적을 통해 어떤 Vector에 대한 수직 Vector를 구할 수는 있다.

 

Position Vector(위치 벡터) - 3차원 공간 안의 한 위치를 나타내는 Vector.
본 책에서는 Dot(점)과 Position Vector(위치 벡터)를 같은 의미로 사용한다.

Dot을 Position Vector로 사용했을 때 한 가지 부차적인 효과를 얻는다.

바로 Dot에 대해서는 의미가 없는 Vector 연산이 가능하다는 점이다.

예를 들어, p(dot) + v(vector) = q(vector)는 p+v라는 vector를 q로 표현한 것이기도 하지만,
p를 v만큼 옮겼을 때의 점의 위치 q이기도 하다.

'내용정리 > DirectX12' 카테고리의 다른 글

05. DirectXMath.h에서의 Vector 관련 기능  (0) 2020.05.22
04. 기초 필수 수학 - Transform  (0) 2020.05.22
03. 기초 필수 수학 - Matrix  (0) 2020.05.15
01. DirectX 12 Project Setting  (0) 2020.05.08
00. 글쓰기에 앞서  (0) 2020.05.08

현재 Visual Studio 2019 Community를 사용하고 있습니다.

 

제가 가지고 있는 [DirectX 11을 이용한 3D 게임 프로그래밍 입문] 책에서는 라이브러리를 따로 설치하고
.h, .lib 파일을 프로젝트 단위로 추가하는 복잡한 과정을 거치고 있습니다.

 

하지만 검색을 통해 알아본 결과, 상당히 편리하게 Template를 제공하는 것을 발견했습니다.

 

https://docs.microsoft.com/ko-kr/windows/uwp/gaming/user-interface

 

DirectX 게임 프로젝트 템플릿 - UWP applications

UWP(유니버설 Windows 플랫폼) 및 DirectX 게임을 만드는 템플릿에 대해 알아봅니다.

docs.microsoft.com

이를 기반으로 프로젝트 세팅 방식을 간단하게 정리하겠습니다.

 

저는 예전에 DirectX11 공부를 위해 생성한 프로젝트가 있어서 그것을 재사용 하였습니다.

이전에 만든 DirectX11 Template Project는 동작을 하지 않았습니다.

때문에 Project를 다 제거하였습니다.

 

위 화면은 Solution 우클릭 >> Add >> new Project를 한 화면입니다.

다양한 Template들이 제공되는데, 위에 Search for templates라고 적힌 검색창에서 DirectX를 검색해봅시다.

 

그럼 이렇게 3가지가 검색됩니다.

제가 하고자 하는 DirectX 12는 한가지 Template 밖에 없고, DirectX 11로는 일반 App과 XAML을 쓰는 App이 있습니다.


https://ko.wikipedia.org/wiki/XAML

 

XAML - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 XAML WPF 응용 프로그램 확장 응용 프로그램 마크업 언어(Extensible Application Markup Language), 곧 XAML([zæ:mɛl])로 발음)은 마이크로소프트사가 구조값과 객체를 초기화하는 데 사용하려고 만든 선언형 XML 기반 언어이다. 마이크로소프트사의 Open Specification Promise를 통해 사용할 수 있다.[4] XAML은 원래 윈도 프레

ko.wikipedia.org

위에 올린 template 관련 링크에서 XAML을 사용하면 조금 더 편리하지만 성능이 저하된다는 점.

그리고 DirectX 12에서는 XAML을 사용하는 template이 없다는 점으로 미루어 보아
사용하는 것에 크게 신경쓰지 않아도 될 것 같습니다.

 

DirectX 12 App (Universal Windows - C++/CX)를 선택해줍시다.

 

Project 이름을 작성하는 공간입니다.

원하는 이름을 작성합시다.

저는 예시로 만들어 본 프로젝트이니 ExampleCreation이라 이름 붙였습니다.

 

간혹 이렇게 책에 있는 예시를 따라 할 때마다 Solution째로 새로 만드는 사람이 있습니다.

저도 예전에는 그렇게 하였는데, Solution에는 여러 Project를 넣을 수 있습니다.

또한 Solution Properties >> Common Properties >> Startup Project에서 빌드 될 Project를 지정할 수 있습니다.

여기서 Current selection을 선택하면 현재 자신이 열고 있는 Project를 우선적으로 빌드 합니다.

 

이를 이용해 여러 개의 Project를 하나의 Solution으로 편리하게 관리할 수 있습니다.

책의 예시는 한 곳에서 모아놓고 보는 것이 편리한 면이 있기에 이 방법을 추천합니다.

 

다음은 Windows 지원 버전을 선택하는 것입니다.

실제 게임을 개발할 때에는 중요하지만, 우리는 연습문제나 예시코드를 작성할 것이니 대충 선택합시다.

 

이 부분이 DirectX12 Template로 생성한 Project에서 제공하는 기본 코드입니다.

이에 대해서는 나중에 코드 분석을 따로 할 예정입니다.

 

DirectX12 Template Project의 기본 결과물입니다.

 

무지개빛 Cube가 회전하고 있습니다.

 

 

제가 마지막으로 DirectX를 공부하려 했을 때가 1년하고 수개월도 더 전이었습니다.

그때는 이정도로 친절한 문서들이 없었는데, 요즘에는 정말 친절한 문서가 많은 것 같습니다.

그래도 영문 문서나 글로만 되어 있는 문서가 아니라 한글과 사진이 같이 있는 문서를 찾는 분들은 늘 존재해왔습니다.

그런 분들이 참고할 수 있도록 최대한 자세하게 작성해보도록 하겠습니다.

'내용정리 > DirectX12' 카테고리의 다른 글

05. DirectXMath.h에서의 Vector 관련 기능  (0) 2020.05.22
04. 기초 필수 수학 - Transform  (0) 2020.05.22
03. 기초 필수 수학 - Matrix  (0) 2020.05.15
02. 기초 필수 수학 - Vector  (0) 2020.05.08
00. 글쓰기에 앞서  (0) 2020.05.08

원래는 [DirectX 12을 이용한 3D 게임 프로그래밍 입문] 책을 구매한 뒤 그 내용을 정리할 생각이었습니다.

하지만 집에 [DirectX 11을 이용한 3D 게임 프로그래밍 입문] 책이 있기도 하고, 

제가 알기로는 책에 적힌 DirectX 예시코드나 프로젝트 세팅이 지금과 많이 차이가 나는 것으로 알고 있습니다.

 

그래서 이론적인 부분은 가지고 있는 책으로 정리를 하고, 예시 코드는 DirectX 12로 구현하고자 합니다.

간간히 코드 분석도 추가하여 그럭저럭 볼만한 보조자료 느낌으로 글을 작성하고자 합니다.

원래는 DirectX를 공부할까 네트워크 공부를 할까 고민을 하였습니다.

 

그러다 책장을 봤는데 사놓고 아직 못 본 책, 봤는데 내용이 기억 안나는 책이 눈에 들어왔습니다.

 

그래서 금요일은 하루종일 이 책들 중 한 권을 읽고, 내용을 정리하려 합니다.

 

우선은 DirectX12, Game Engine Architecture, More Effective C++을 위주로 읽을 계획입니다.

+ Recent posts