DuckingRacoon
[DX11 3D 게프입] CH1-1. 벡터와 XNA math 라이브러리 본문
“DirectX 11을 이용한 3D 게임 프로그래밍 입문”을 정리한 포스트이다.
🔍 벡터?
크기(스칼라)와 방향을 모두 가진 수량
- 벡터값 수량(Vector-valued quantity): 힘, 속도와 같이 크기와 방향을 모두 가진 수량
기하학적으로 나타낸 벡터 🖼️
지향 선분(directed line segment)로 표시
- 방향 = 화살표
- 크기 = 선분의 길이
! 위치는 중요하지 않다.
- 만약 ( 길이가 같고 ) && ( 방향이 같으면 ), 상등이다.
- 병진 이동( translation )해도 의미 변화가 없다.
벡터의 수치적 표현과 좌표계 🔢
컴퓨터는 기하적으로 벡터를 다루지 못하기 때문에, 벡터를 수치적으로 표현할 방법이 필요하다.
좌표계를 도입하고 → 벡터의 꼬리와 원점O이 일치하도록 이동시켜
⇒ 벡터의 화살표 끝을 좌표로 백터를 수치적으로 표현할 수 있다.
좌표계에 상대적인 좌표 🔀
같은 벡터라도 좌표계가 다르면, 좌표 표현이 다르다.
- 3D 컴퓨터 그래픽에서는 여러 개의 좌표계를 사용하기 때문에, 주어진 벡터 좌표가 어떤 기준계로 설정되었는지 기억할 필요가 있다.
오른손잡이/왼손잡이 좌표계 👐🏻
- Direct3D는 왼손 좌표계를 사용한다.
👷🏻♂️실습: 벡터 설정- XNA Math 라이브러리
프로젝트 설정 🔧
CH1에서의 프로젝트 설정은 빈 프로젝트 + 포함 디렉터리 (Include Directory)만 설정해주면 된다.
- 프로젝트 properties에 들어간다.
2. Configuration Properties > VC++ Directories에 들어가 include Directories(포함 디렉토리)에 DirectX SDK의 include파일의 path를 설정해준다.
- 일반적으로 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include 에 있다.
코드 💻
#include<Windows.h>
#include<xnamath.h> // 사용 라이브러리
#include<iostream>
using namespace std;
// cout을 사용하여 XMVECTOR 객체를 출력할 수 있도록 << 연산자 오버로딩
ostream& operator<<(ostream& os, FXMVECTOR v)
{
XMFLOAT3 dest;
XMStoreFloat3(&dest, v);
os << "(" << dest.x << ", " << dest.y << ", " << dest.z << ")";
return os;
}
int main()
{
cout.setf(ios_base::boolalpha);
// SSE2 지원 여부 확인
if (!XMVerifyCPUSupport())
{
cout << "xna math not supported" << endl;
return 0;
}
// XMVectorZero(): 영벡터 생성
XMVECTOR p = XMVectorZero(); // (0, 0, 0, 0)
// XMVectorSplatOne(): (1, 1, 1, 1) 벡터 생성
XMVECTOR q = XMVectorSplatOne(); // (1, 1, 1, 1)
// XMVectorSet(x, y, z, w) : (x, y, z, w) 벡터 생성
XMVECTOR u = XMVectorSet(1.0f, 2.0f, 3.0f, 0.0f); // (1, 2, 3, 0)
// XMVectorReplicate(s): (s, s, s, s) 벡터 생성
XMVECTOR v = XMVectorReplicate(-2.0f); // (-2, -2, -2, -2)
// XMVectorSplatZ(v): (z, z, z, z) 벡터 생성
XMVECTOR w = XMVectorSplatZ(u); // (3, 3, 3, 3)
cout << "p = " << p << endl;
cout << "q = " << q << endl;
cout << "u = " << u << endl;
cout << "v = " << v << endl;
cout << "w = " << w << endl;
return 0;
}
'공부 > DirectX11을 이용한 3D 게임 프로그래밍 입문' 카테고리의 다른 글
+ SIMD란? 일반 연산과 SIMD의 연산 성능 실험 (1) | 2024.02.09 |
---|---|
[DX11 3D 게프입] 0. DirectX 11의 개요 및 설치 (0) | 2024.02.07 |