Make Unreal REAL.
article thumbnail
컨벡스 결합(Convex combination)

이득우의 게임 수학 아핀 결합식에서 세 점 P₁, P₂, P₃를 결합하는 경우, 세 스칼라의 합이 1이 되어야 하므로 다음처럼 전개된다. P' = sP₁ + tP₂ + (1 - s - t)P₃ (P' - P₃) = s(P₁ - P₃) + t(P₂ - P₃) 각 점의 뻴셈을 벡터로 치환하면, w = su + tv 이때 벡터 u와 v가 서로 선형 독립의 관계라면, w는 2차원 공간 R²에 존재하는 모든 벡터를 표현할 수 있다. 따라서, 세 점의 아핀 결합은 평면의 모든 점을 만들어낸다. 두 점의 아핀 결합에서 s의 범위를 [0, 1]로 제한하면 선분이 되었다. 세 점에서는 s와 t의 범위를 [0, 1]로 제한하면, w가 생성하는 평면은 삼각형이 된다. 이렇게 아핀 결합에서 모든 스칼라의 값을 [0, 1] 범..

article thumbnail
내적을 활용한 벡터의 투영

이득우의 게임 수학 벡터 u에 벡터 v를 직교 투영한 벡터 P를 구해본다. vₑ는 v 방향의 단위 벡터이다. P = uₑ * |P| = uₑ * |v|cosθ = u / |u| * |v|cosθ = u * |u||v|cosθ / |u|² = u * u·v / |u|² u를 단위벡터 uₑ로 미리 만들고 시작하면, P = uₑ * uₑ·v

article thumbnail
램버시안 반사율 모델

이득우의 게임 수학 램버시안 반사율 모델(Lambertian reflection model) 내적을 활용해 조명 효과를 만들기 위해 고안된 방법이다. 그럴듯한 조명 효과를 주면서도 계산량이 적어 속도가 빨라, 실시간 조명 구현이 필요한 게임 제작에 널리 사용된다. 광원이 물체를 비출 때 한 점에서 생각해보자. 직사광선이 물체에 닿은 지점을 P라고 할 때, 점 P에서의 법선 벡터를 N, 점 P에서 광원을 향하는 벡터를 L이라고 하자. 두 벡터가 모두 단위 벡터라고 가정하면, N·L = cosα가 된다. 중심으로부터 점점 멀어져 직사광선이 닿은 지점 P가 멀어질수록 α는 커지고, cos 함수의 특성상 α가 커질수록 cosα의 값은 감소하게 된다. 램버시안 반사율 모델은 3차원의 광원 효과를 나타내는 데 사용..

article thumbnail
내적을 활용한 시야 판별

이득우의 게임 수학 벡터의 크기는 항상 양수이므로, 내적의 부호는 cosθ로 결정된다. 빨간 벡터를 기준 A라고 할 때, 다른 벡터 B가 A와 이루는 각도에 따라 내적의 부호는 아래와 같다. 이를 통해 두 벡터의 방향이 어떻게 다른지 알 수 있다. 0 < 내적 같은 방향을 향하고 있다. 내적 = 0 서로 직교한다. 내적 < 0 서로 다른 방향을 향하고(혹은 마주보고) 있다. 게임에서 이를 활용하면, 물체가 캐릭터의 어느 방향에 있는지 알 수 있다. 캐릭터의 앞 방향을 벡터 f, 캐릭터가 물체를 향하는 벡터를 v라고 할 때, 0 < f·v 캐릭터의 앞에 물체가 있다. f·v = 0 캐릭터의 바로 옆에 물체가 있다. f·v < 0 캐릭터의 뒤에 물체가 있다. 위치 판별 뿐만 아니라, 캐릭터의 시야 판별에도 ..

article thumbnail
내적(Dot product)

이득우의 게임 수학 같은 차원의 두 벡터 A(Ax, Ay), B(Bx, By)가 주어졌을 때 내적은 다음과 같다. |A|는 벡터 A의 크기이다. 같은 벡터를 내적하면, 크기의 제곱이 나온다. (x, y)·(x, y) = x² + y² 내적은 스칼라 곱셈과 덧셈으로 구성되어 있으므로, 교환법칙이 성립한다. u·v = v·u 덧셈에 대한 분배법칙도 성립한다. w·(u + v) = w·u + w·v 하지만 결과가 벡터가 아닌 스칼라이므로, 결합법칙은 성립하지 않는다. u·(v·w) != (u·v)·w 행렬과 벡터의 곱은 내적으로 나타낼 수 있다. 행렬의 곱도 내적으로 나타낼 수 있다. 직교 행렬이란, 정방 행렬을 구성하는 모든 행 벡터와 열 벡터의 크기가 1이고, 벡터들이 서로 직교하는 행렬이다. 직교 행렬의..

article thumbnail
코헨-서덜랜드 라인 클리핑 알고리즘

이득우의 게임 수학 브레젠험 알고리즘은 시작점에서 끝점까지 한 픽셀씩 전진하면서 점을 찍기 때문에, 스크린을 벗어나는 굉장히 큰 값이 들어올 때도 마찬가지로 진행해야 한다. 따라서, 스크린 영역을 벗어나는 선분이 들어와도 영역에 유효한 선분으로 잘라주는 클리핑(Clipping) 작업이 필요하다. 코헨-서덜랜드 라인 클리핑 알고리즘(Cohen-Sutherland Line Clipping Algorithm) 가운데 유효한 스크린 영역과 바깥 영역을 포함해 총 9개 영역으로 나눈 후, 두 점이 포함된 영역의 비트 연산을 통해 선분을 그려야 하는지 판별하고 클리핑을 진행하는 알고리즘이다. 위(10) / 중간(00) / 아래(01) + 왼쪽(01) / 중앙(00) / 오른쪽(10) 9개 중 어느 영역에 포함된 점..

검색 태그