Skip to content

Latest commit

 

History

History
247 lines (166 loc) · 8.68 KB

README.md

File metadata and controls

247 lines (166 loc) · 8.68 KB

Vector

영상 참고

벡터는 게임 개발에서 중요한 개념으로 사용된다.

  • 크기와 방향으로 정의되는 값
  • 방향/거리/속도, 위치를 나타내기 위한 수학적 도구

스칼라는 크기

표현

  • 시점, 종점으로 표현
  • 크기가 존재, 방향이 존재

성질

  • 크기와 방향이 동일하면 동일한 벡터로 취급
  • 임의의 벡터 공간에서, 한 벡터와 동일한 벡터는 무수히 많다.

상대좌표, 절대좌표

  • 상대좌표: 원점을 기준으로 한 좌표
  • 절대좌표: 절대적인 좌표
    • 벡터 공간내에서 모든 벡터의 시점을 일치시킨다면, 임의의 벡터는 존재하지 않는다. (종점과 일대일 대응된다. 위치벡터)

벡터의 덧셈

각 피연산자들의 성분끼리 더한다.

$$ \vec{a} + \vec{b} = \vec{c} $$ $$ \vec{a}(1,4) + \vec{b}(3,2) = \vec{c}(4,6) $$

image

벡터의 뺄셈

각 피연산자들의 성분끼리 뺀다.

$$ \vec{a} - \vec{b} = \vec{c} $$ $$ \vec{a}(1,4) - \vec{b}(3,2) = \vec{c}(-2,2) $$

벡터의 뺄셈은 벡터 더하기 마이너스 벡터로 표현할 수 있다.

벡터의 스칼라 곱

벡터의 실수배

각 성분에 스칼라를 곱한다.

$$ k\vec{a} = \vec{c} $$ $$ 3\vec{a}(1,4) = \vec{c}(3,12) $$

방향벡터

벡터를 통해 방향과 거리를 포현하는 경우 상당히 비직관저임

따라서 방향*거리로 쪼개어 표현하는 것이 직관적임

방향을 표현하는 벡터를 방향벡터라고 한다. (크기가 1인 벡터)

방향 x 크기 = 벡터

방향벡터를 구하는 방법

  • 벡터를 크기로 나눈다.
  • 단위벡터를 구한다.

image

크기를 구하는 방법

  • 벡터의 각 성분을 제곱하여 더한 후 제곱근을 취한다.

image

(3,-4, 0)

$$ \sqrt{3^2 + (-4)^2 + 0^2} = 5 $$ $$ \frac{1}{5}(3,-4,0) = (0.6, -0.8, 0) $$

벡터의 내적

두 벡터가 이루는 각을 구하려면 내적을 사용한다.

벡터의 내적은 한 벡터를 다른 벡터에 투영시켜 그 크기를 곱하는 연산

$$ \vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|cos\theta $$ $$ \vec{a} \cdot \vec{b} = a_xb_x + a_yb_y + a_zb_z $$ $$ \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} = cos\theta $$

  • 성질
    • 두 벡터가 서로 수직이면 내적의 결과는 0이다.
    • 내적의 결과는 스칼라이다.
    • 교환/분배가 성립한다.

image

cosangle구하는 법

내적은 벡터의 곱셉 하지만 값은 스칼라

내적의 값이 0이라면 두 벡터는 수직이다.

내적의 값이 양수라면 0도와 90도 사이에 있다. (1) 즉, 두 벡터가 같은 방향을 가지고 있다.

내적의 값이 음수라면 90도와 180도 사이에 있다. (-1) 즉, 두 벡터가 반대 방향을 가지고 있다.

image

총알의 진행 방향과, 현재 뱡향의 내적이 0 초과라면 데미지를 입는다. 즉 같은 방향을 가진다면 데미지를 입는다.

image

image

에너지 총량의 법칙 때문에 빛이 닿는 면적의 밝기는 코사인 세타이다.

45도는 약 0.7정도로 나옴(코사인 45도)

벡터의 외적

  • 벡터의 외적은 두 벡터를 모두 수직으로 통과하는 벡터를 구하는 연산
  • 벡터곱 또는 교차연산으로 부르기도 한다.

$$ \vec{a} \times \vec{b} = |\vec{a}||\vec{b}|sin\theta $$ $$ \vec{a} \times \vec{b} = (a_yb_z - a_zb_y, a_zb_x - a_xb_z, a_xb_y - a_yb_x) $$

  • 성질
    • 두 벡터를 외적한 벡터의 크기는 두 벡터가 이루는 평행사변형의 넓이와 같다.
    • 외적의 결과는 벡터이다.

image

frontDirection은 현재 면의 앞을 가리키는 벡터이다.

sinagngle은 두 벡터가 이루는 각도이다.

image

image

image

벡터 내적의 활용

앞 뒤 판별

  • 내적을 이용하여 두 벡터가 같은 방향을 가지고 있는지 판별할 수 있다.
  • 내적이 0보다 크면 같은 방향, 0보다 작으면 반대 방향, 0이면 수직이다.

캐릭터의 위치: (1, 1) 캐릭터의 시야 방향 벡터: (1, 0) 목표물의 위치: (2, 3)

  • 목표 벡터 계산
    • 목표물의 위치 - 캐릭터의 위치 = (1, 2)
  • 벡터 정규화
    • 시야 벡터
      • 크기: $\sqrt{1^2 + 0^2} = 1$ 바로 단위 벡터
    • 목표 벡터
      • 크기: $\sqrt{1^2 + 2^2} = \sqrt{5}$
      • 단위 벡터: $\frac{1}{\sqrt{5}}(1, 2)$
  • 내적 계산
    • $\frac{1}{\sqrt{5}}(1, 2) \cdot (1, 0) = \frac{1}{\sqrt{5}}$
  • 판별
    • 내적이 0보다 커서 목표는 앞에 있다.

시야각 판별

캐릭터가 특정 방향을 바라보고 있을 때, 목표물이 캐릭터의 시야 안에 있는지 판별하는 문제입니다. 캐릭터의 시야 각도(FOV)가 주어졌을 때, 목표물이 그 시야 안에 있는지 여부를 판단합니다.

  • 캐릭터의 위치: (1, 1)
  • 캐릭터의 시야 방향 벡터: (1, 0)
  • 캐릭터의 시야 각도: 90도 (+- 45도)
  • 목표물의 위치: (3, 2)
  • 목표 벡터 계산
    • 목표물의 위치 - 캐릭터의 위치 = (2, 1)
  • 벡터 정규화
    • 목표 벡터
      • 크기: $\sqrt{2^2 + 1^2} = \sqrt{5}$
      • 단위 벡터: $\frac{1}{\sqrt{5}}(2, 1)$
    • 시야 벡터
      • 크기: $\sqrt{1^2 + 0^2} = 1$
      • 단위 벡터: (1, 0)
  • 내적 계산
    • $\frac{1}{\sqrt{5}}(2, 1) \cdot (1, 0) = \frac{2}{\sqrt{5}}$
  • 코사인 값 계산
    • $cos\theta = \frac{2}{\sqrt{5}}$
    • $\theta = cos^{-1}(\frac{2}{\sqrt{5}})$

조명 효과

램버트 반사 모델은 표면의 확산 반사를 설명하는 간단한 조명 모델입니다. 이 모델은 표면의 밝기가 빛의 입사각에 따라 변하며, 모든 방향으로 균일하게 반사되는 것을 가정합니다. 조명 효과를 계산하기 위해 램버트 반사 모델을 사용해 보겠습니다.

  • 표면의 법선 벡터 N: (0, 0, 1)
  • 빛의 방향 벡터 L: (1, 1, 1)
  • 입사광의 세기 I: 1
  • 표면의 반사율 R: 0.8
  • 벡터의 정규화
    • N: (0, 0, 1)
    • L: $\frac{1}{\sqrt{3}}(1, 1, 1)$
  • 내적 계산
    • $N \cdot L = 0 * \frac{1}{\sqrt{3}} + 0 * \frac{1}{\sqrt{3}} + 1 * \frac{1}{\sqrt{3}} = \frac{1}{\sqrt{3}}$
  • 조명 효과 계산
    • $I * R * (N \cdot L) = 1 * 0.8 * \frac{1}{\sqrt{3}} = \frac{0.8}{\sqrt{3}}$

벡터의 외적의 활용

삼각형 표면의 법선 벡터

게임에서 삼각형 표면의 법선 벡터를 계산하는 문제입니다. 삼각형의 세 꼭지점이 주어졌을 때, 그 표면의 법선 벡터를 외적을 사용하여 계산합니다.

  • 삼각형의 세 꼭지점
    • P_1: (1, 0, 0)
    • P_2: (0, 1, 0)
    • P_3: (0, 0, 1)
  • 벡터 정의
    • 삼각형의 두 변을 나타내는 벡터 U와 V를 정의한다.
    • U = P_2 - P_1 = (-1, 1, 0)
    • V = P_3 - P_1 = (-1, 0, 1)
  • 외적 계산
    • N = U x V = (1, 1, 1)

좌우 방향 판별

월드 공간의 Y축 (0,1,0)에 직교하는 평면에 캐릭터와 물체가 놓여 있습니다. 캐릭터의 정면을 향하는 시선 벡터 f와 캐릭터에서 물체로 향하는 벡터 v가 주어진 상황에서 물체가 캐릭터의 시선 방향 기준으로 좌측에 있는지 우측에 있는지를 판별합니다.

  • 월드 공간의 Y축: (0, 1, 0)
  • 캐릭터의 위치 C: (1, 1, 1)
  • 물체의 위치 P: (3, 1, 4)
  • 캐릭터의 시선 벡터 f: (1, 0, 0)
  • 벡터 v는 캐릭터에서 물체로 향하는 벡터
    • v = P - C = (2, 0, 3)
  • 외적 계산
    • N = f x v = (0, -3, 0)
  • 외적 벡터 n과 y축 비교
    • 외적 벡터 n이 y축과의 방향을 비교한다.
      • n의 y 성붖ㄴ이 양수이면 v는 f의 오른쪽에 있다.
      • n의 y 성분이 음수이면 v는 f의 왼쪽에 있다.
      • n의 y 성분이 0이면 v는 f와 평행하거나 동일선상이다.
    • 외적 계산 결과
      • N = (0, -3, 0)이므로 v는 f의 왼쪽에 있다.