전체 글
-
벡터의 내적과 외적을 응용해 왼쪽 오른쪽 판별이러저런 이야기 2019. 12. 19. 10:45
벡터의 외적은 벡터 곱이라 할 수 있으며, 벡터 A와 벡터 B의 외적을 A x B라고 한다 [A cross B]. 외적의 결과는 내적과 달리 벡터가 나오며, A x B [외적 벡터]의 방향은 수학에서는 오른손 법칙을 사용한다. 게임은 엔진이 사용하는 좌표계에 따라 다른데, OpenGL에서는 오른손 법칙, Unity는 왼손 법칙에 따른다. 그리고 외적 벡터의 크기는 두 벡터의 크기에 sinθ를 곱한 값과 같다. [A x B = |A| |B| sin θ] 외적의 특징으로 A와 B 벡터의 외적, AxB는 벡터 A와도 수직이고, 벡터 B와도 수직이다. 캐릭터와 적이 월드 상에 존재할 때 월드 좌표계의 Up 방향 벡터를 U, 캐릭터의 Forward 방향 벡터를 F, 그리고 적과 캐릭터의 위치를 뺀 벡터를 A라고 ..
-
내적을 이용한 시야 판별이러저런 이야기 2019. 12. 19. 10:45
벡터의 내적은 지난 게시글에 있으니 공식만 보겠습니다. a·b = ||a|| ||b|| cos θ 이게 벡터의 내적 공식이며, 여기서 cos θ 두 벡터의 사이 각을 의미한다. 한마디로 두 벡터 A, B의 값을 알고 있다면 두 벡터의 사이 각을 알 수 있다. 위 사진이 많이 조잡하지만 이해해주세요. 플레이어가 가진 Forward 벡터와 적 위치에서 플레이어의 위치를 뺀 벡터 A가 있을 때 플레이어의 시야 각을 θ라고 한다면 F 벡터와 A 벡터의 내적 한 값이 θ / 2보다 값이 작아야 플레이어의 시야 안에 있다고 할 수 있다. [+ 내적을 해서 나온 값이 양수[cos θ 값]라면 각이 -90 ~ 90 이기 때문에 적이 내 앞에 있다는 뜻이고, 음수라면 각이 90 ~ 270 이기 때문에 적이 내 뒤에 있다..
-
평면의 방정식과 d이러저런 이야기 2019. 12. 19. 10:45
평면의 방정식이란? 평면 위에 존재하는 점 A(x1, y1, z1) 그리고 평면의 법선 벡터가 h->(a, b, c) 일 때 평면의 방정식은 ax + by + cz + d = 0이다. [여기서 d는 원점과의 거리이다.] 평면의 법선 벡터 N(a, b, c)가 있고 평면 위의 한 점 P(d, e, f)가 있을 때 평면 위에 있는 임의의 점 Q(g, h, i)라 가정 했을 때 Q - P 는 평면 위의 벡터가 되며, 법선 벡터와 수직이니 법선 벡터와 내적은 0이 된다. 법선 벡터 N과 평면 위의 점 P를 알고 있으니 -(ad + be + cf)의 결과 값은 상수가 나온다. 여기서 이 값을 d라고 할 때 평면의 방정식은 ax + by + cz + d = 0가 된다. [-(ad + be + cf) 가 d 이므로 ..
-
벡터의 투영 유도하기이러저런 이야기 2019. 12. 19. 10:45
두 벡터 A, B가 존재할 때 벡터 A를 벡터 B에 투영한 벡터를 Proj A라 가정했을 때 위 공식처럼 투영 벡터인 Proj A의 길이는 |A| / Proj A = cos θ이다. 여기서 Proj A = |A| cos θ로 나온다. 여기서 벡터의 내적을 사용하는데 cos θ는 벡터 A와 벡터 B의 사이 각이기 때문이다. 벡터의 내적 공식인 a·b = ||a|| ||b|| cos θ에서 cos θ = A·B / |A| |B|로 식에 대입하면 위 사진과 같다. 이제 벡터 B의 단위 벡터인 B / |B| 를 투영 벡터의 길이[Proj A]에 곱해주면 투영 벡터[Proj]를 구할 수 있다.
-
벡터의 내적 공식 유도하기이러저런 이야기 2019. 12. 19. 10:45
벡터의 내적이란? 두 벡터의 내적 결과 값은 스칼라 값이 나오며 세타 값은 두 벡터 사이의 각을 뜻 합니다. 그래픽스에서는 이 세타 값이 0인지 아닌지만 기억하시면 됩니다. [0이면 두 벡터는 직교한다.] 두 벡터의 내적의 공식 유도를 하기 전에 제1 코사인 법칙과 제2 코사인 법칙을 설명하겠습니다. 먼저 제1 코사인 법칙은 위와 같은 그림의 삼각형이 있을 때 각 꼭짓점에서 마주 보는 선분을 a, b, c라고 했을 때 각 선분의 길이는 아래와 같습니다. 왜 이렇게 되는지 유도를 해보자면 선분 a[BC] 의 길이는 선분 Ba + 선분 Ca 라고 할 수 있습니다. 위 식에서 보이는 [b * cos C]에서 cos C는 코사인 법칙으로 Ca / b라 할 수 있습니다. 따라서 [b * cos C = 선분 Ca]..
-
카메라의 뷰 좌표계와 LookAt 행렬 유도하기이러저런 이야기 2019. 12. 19. 10:44
카메라의 뷰 좌표계란? 카메라 좌표계, 뷰 좌표계라 하는데 전부 같은 말이며, 쉽게 말하자면 월드 좌표계가 우리가 살고 있는 공간의 한 지점을 기준으로 한 좌표계라면 카메라 좌표계는 카메라를 기준으로 한 좌표계입니다. 이제 카메라 좌표계의 방향 벡터들을 구해 보겠습니다. 제일 첫번째로 카메라의 방향을 구할려면 카메라의 위치를 알아야 하며 카메라가 원점을 바라보게 해야합니다. 그런 다음에 원점에서 카메라의 위치를 뺀다면 원점에서 카메라의 위치를 향하는 벡터를 얻을 수 있는데 이 벡터는 카메라의 음의 방향, 즉 카메라 z축의 음의 방향을 가리킵니다. 때문에 카메라의 z축 방향을 얻기 위해서는 (카메라 위치 - 카메라가 바라 보는 타켓 위치)를 해줘야 카메라 좌표계의 z축 방향을 얻을 수 있습니다. 그 다음으..
-
오일러각 입력에 따라 Forward, Up, Right 벡터를 구하고 이를 토대로 3차원 회전 행렬 구하기이러저런 이야기 2019. 12. 19. 10:44
오일러 각이란? - 오일러 각의 3개의 각도만으로 회전을 표현한 것을 말합니다. 위의 큐브를 예로 들자면 z축 기준의 회전각을 roll, x축 기준의 회전각을 pitch, y축 기준의 회전각을 yaw라고 가정하겠습니다. 이 때 오일러각으로 물체의 forward, up, right 벡터를 구하려면 삼각 함수를 사용합니다. [Yaw, Pitch값을 알 때] 위 사진 처럼 빗변의 길이를 1이라고 가정한다면, 밑변의 길이는 = cosθ = x/h -> x/1 ->cosθ = x가 나옵니다. 높이도 마찬가지로 sinθ = y/h -> y/1 -> sinθ = y가 나오게 됩니다. 물체의 방향 벡터를 계산하기 위해 이 공식을 사용합니다. 위 그림과 같이 물체가 xz평면 위에 앉아 있고 y축을 바라본다면, 이 물체의..
-
[선형 변환과 행렬의 관계]이러저런 이야기 2019. 12. 19. 10:44
1. 선형 변환이란? 벡터의 성질을 만족시키면서 벡터를 변환시키는 것을 선형 변환이라 한다. v = ax + by 이러한 벡터 공간이 선형변환(LinearTransform)으로 새로운 벡터 공간을 만들 때 기본적인 전제조건은 원점은 변하지 않는다. (대표적으로 변하는 방법 가만히 있기[항등 변환], 늘리기[스케일], 돌리기[로테이션], 밀기[Shear]) [이동은 선형 변환이 아니다. 이동을 하면 원점이 바뀌기 때문에 선형 변환에는 이동이 포함이 안됨 -> 선형 변환에서 이동은 밀기로 해결이 가능하다] 1차원에서 이동을 하고 싶을 때 2차원 공간에서 이동하고 싶은 축이 아닌 다른 축(ex : x를 이동하고 싶으니 y축) y =1인 영역으로 밀기, 2차원에서 이동은 3차원에서 z가 1인 영역에서 밀기 하면..