DirectX를 공부하기 위해 필요한 가장 기초적인 수학 개념중 하나가 Vector이다.
해당 Vector는 수학이나, 유니티, 언리얼같은 엔진에서 배웠던 개념도 DirectX에서도 적용된다.
Vector의 특징은 아래와 같다.
1. Vector는 크기와 방향을 모두 가진 수량을 가리키는 말이다. ( 이런 크기와 방향으 모두 가진 수량을 벡터값 수량이라 부른다 - 해당 벡터값 수량의 예로 힘, 변위, 속도가 있다. )
2. Vector는 힘이나 변위, 속도를 나타내는데 사용하며, 순수 방향을 나타내는 경우에서도 Vector를 사용한다.
3. 벡터가 그려져 있는 위치는 중요하지 않다. ( 위치를 바꿔도 벡터의 크기나 방향은 변하지 않기 때문에 )
4. 벡터는 길이와 방향이 같을 때, 상등(equal)하다.
수학적 특징
시각적으로 벡터는 지향선분(Directed line segment), 방향이 있는 선분으로 표시한다.
선분의 길이는 벡터의 크기를 나타내고, 선분의 화살표는 벡터의 방향을 뜻한다. 벡터의 핵심은 크기와 방향이기에, 어느 위치에 그려져 있는지 중요하지 않다. 벡터를 다른곳으로 이동(translation)해도 그 벡터의 의미는 변하지 않는다.
이제 좌표계 개념을 합쳐서 생각해 보자
컴퓨터는 벡터를 기하학적으로 다루지 못한다. 그래서 벡터들을 하나의 공간에 3차원 좌표계를 도입하고, 모든 벡터를 그 꼬리가 원점과 일치하도록 이동한다.
그렇다면 하나의 벡터는 그 화살표 끝, 즉 벡터의 머리를 좌표로써 지정할 수 있으며, 이를 (x,y,z) 값으로 표기할 수 있다.
이 벡터를 컴퓨터 프로그램 안에서 값으로써 활용할 수 있다. 즉, 해당 벡터를 벡터값 수량과 관련된 연산을 진행할 수 있는 것이다.
하지만 여기서 주의해야 할 점은 좌표계, 공간, 기준계, 프레임이 바뀌면,
같은 벡터라도 좌표계가 다르면 좌표 표현이 달라진다는 것이다.
좌표계에 따라 바뀌는 것은 벡터를 표현하는 좌표뿐이다. 벡터의 크기와 방향은 바뀌지 않는다.
이것이 중요한 이유는 어떤 벡터를 좌표로 규정하거나, 식별할 때 그 좌표는 항상 어떤 기준계에 상대적임을 뜻하기 때문이다.
DirectX는 소위 왼손잡이 좌표계를 사용한다. 아래 그림을 보자

다른 그래픽 프로그램인 OpenGL같은 경우는 오른손잡이 좌표계를 사용한다.
이제 벡터의 좌표 표현(특정 좌표계에 표현되는)을 이용해서 벡터의 연산들을 해보자
두 벡터 u,v가 있다고 해보자
1. 두 벡터는 오직 해당 좌표성분들이 상등일 때에만 상등이다.
2. 벡터 덧셈은 성분별로 이뤄진다.
3. 벡터의 스칼라를 곱할 수 있다. 그 결과도 벡터이기 때문에, k가 스칼라 값이면, ku = ku(x) , ku(y), ku(z) 이다.
4. 벡터 뺄셈은 벡터 덧셈과 스칼라 곱셈을 통해서 정의된다. u - v = u + ( -1 * v )
여기서 어느 두 벡터 u + v의 결과는 물리에서 힘들을 더해 알짜힘을 구하는 것과도 직관적으로 일치한다.
u - v같은 경우에는 기하학적으로 해석했을 때, 점 v가 점 u로 가는 벡터에 해당한다.
여기서 단위벡터의 개념 또한 알아야 할 필요가 있다.
기하학적으로 한 벡터의 크기는 해당 지향 선분(방향성을 가지고 있는 선분)의 길이다. 즉, 벡터의 크기(길이)는 이중 수직선으로 표기한다 ( ||u|| : u 벡터의 크기 )
해당 벡터의 길이를 구하려면, 흔히, 피타고라스 정리를 이용해서 벡터의 길이이자, 크기를 구할 수 있다.
3차원이면 피타고라스 정리를 2번 적용해서 구할 수 있다.
만약 벡터를 순수한 방향을 나타내는 용도로 사용하는 경우에는 벡터의 길이가 중요하지 않을 수 있다.
그런 방향 전용 벡터에서 벡터의 길이가 1로 맞춰야 한다.
벡터의 길이를 단위 길이가 되게 해서 단위벡터( unit vector )로 만드는 것을 가리켜 벡터의 정규화( normalization )라고 부른다.
벡터의 각 성분을 벡터의 크기로 나누면 벡터가 정규화 된다.
예를들어 벡터의 크기가 3이라고 했을 때, 각 성분이 1, 2, 2 라 했을 시, 단위벡터는 1/3, 2/3, 2/3이 된다. 그 단위벡터의 크기는 당연히 1이 될 것이다.
'DirectX' 카테고리의 다른 글
| DirectX3D) 6. 행렬의 활용(SRT) (0) | 2026.05.09 |
|---|---|
| DirectX3D) 5. 행렬 (0) | 2026.05.05 |
| DirectX3D) 4. Point (0) | 2026.04.30 |
| DirectX3D) 3. 외적 (0) | 2026.04.29 |
| DirectX3D) 2. 내적 (4) | 2025.08.25 |