목록수학 (27)
cyphen156

백터의 외적내적과 다르게 외적의 경우 3차원 이상의 공간에서만 사용가능한데, 그 이유는 외적이 왼손법칙에서 설명했듯이 두 벡터에 대한 외적의 결과가 두 벡터 모두에 직교하는 새로운 벡터를 만들고, 이것이 회전 축을 결정하는 역할을 하기 때문이다.내적의 결과는 항상 스칼라였지만, 외적의 결과가 방향과 크기를 갖는 벡터이기 때문이라고 다시 설명할 수 있다.A · B 내적 연산 기호 = ∣ a ∣∣ b ∣ cosθ == axbx + ayby + azbz A X B 외적 연산 기호 = ∣ a ∣∣ b ∣ nsinθ == (aybz − azby, azbx − axbz, axby − aybx)위 수식에서 보면 알 수 있듯 내적은 같은 성분끼리 곱한 뒤 더하여 최종 결과를 만들어내고, 외..

3차원 공간은 원근감이 존재하기 때문에 구현 방법이 복잡해지고, 예상밖의 상황이 많이 생긴다고 한다. 이것을 오일러의 각도법과 벡터의 외적으로 하나씩 해결해 나가면서 여러 수학적 지식과 게임 엔진 개발에 대한 지식들을 배울 수 있을 것 같다.좌표계 기준이 전에 한번 언급한적 있었던 왼손 좌표계와 오른손 좌표계에 대한 내용이다. 이 둘은 관점에 따라 3차원 공간을 설계하는 큰 차이를 만들어내는 기준들이 되는데 그 기준이 물체를 바라보는데 있어서 나를 기준으로 오는지, 또는 앞으로 가는지를 결정한다.대표적인 특징은 다음과 같다. 하지만 상대적인 기준일 뿐 절대적이지는 않다.왼손 좌표계 : 배경을 관찰하는데 적합하다오른손 좌표계 : 물체를 관찰하는데 더 익숙하다.밑의 그림은 대표적인 게임, 모델링 툴, 엔진과..

게임 엔진은 유니티와 엔진과 자체엔진 개발공부로 어느정도 학습해 나가고 있다고 생각한다.이번 9장에서는 이득우 교수님의 CK소프트 렌더러라는 CPU BaseEngine에서 게임이라는 소프트웨어를 구성하기 위해 게임 엔진이 어떤 기능을 해야 하는지 배울 것이다.우선 모든 게임 오브젝트가 기본적으로 가지고 있는 Transform에 대해서 생각해 보면Position(T), Rotation(R), Scale(S)로 정의된다.이 트랜스폼 정보들은 행렬 곱 연산을 통해 아핀 변환을 수행하기 때문에 교환 법칙이 성립하지 않아 순서가 가장 중요하다. 이 변환의 순서 조합은 6가지가 생기는데 다음과 같다.S * R * TS * T * RT * S * RT * R * SR * S * TR * T * S이렇게 순서에 따라 ..

이전까지는 한 점(점의 좌표) 혹은 두 점(선분, 벡터) 에 대해 공부했다면, 이제부터는 3D 그래픽스 및 게임 그래픽에서 가장 기본적인 단위인 세 개의 점(정점, Vertex)으로 구성된 삼각형에 대해서 배우겠다. 정점(Vertex), 삼각형(Triangle), 폴리곤(Polygon)앞선 장에서 두 벡터가 서로 선형 독립의 관계라면 같은 차원 내의 공간상에서 어떠한 벡터든 만들어 낼 수 있다고 배웠다.그런데 아핀 공간상에서 점들의 결합의 스칼라 결과는 항상 1이 되어야 한다고 했다.또한 선분을 그릴 때 S와 T값을 [0, 1]로고정한다면 유한한 크기의 직선을 구할 수 있다고 했다.이것을 통해 삼각형의 형태 안에 존재하는 점들이 모두 아핀 결합식으로 생성될 수 있는 점들이라 판단할 수 있다.이렇게 탄생한..

게임에서 빛의 표현을 위해 사용하는 여러가지 공식들이 있다. 그 중 하나가 램버트 반사 모델이다.램버트 반사는 물체가 광원으로부터 빛을 받았을 때 반사하는 빛의 세기가 Cos함수에 비례 한다는 것을 착안하여 만들어낸 모델이다. 다만 모든 표면이 동일하게 빛을 확산 반사한다고 가정하기 때문에 정확한 빛의 반사를 표현하기는 어렵지만 단순하기 때문에 빠른 연산속도를 보장하고, 그럴듯한 음영 효과를 플레이어에게 제공하기 때문에 유용한 공식이다.다음은 플레이어 포지션을 따라 광원으로부터 빛을 반사하는 예제이다.공유 변수// 게임 로직과 렌더링 로직이 공유하는 변수/// 7_2 예제/// 조명 모델 구현하기Vector2 lightPosition; // 광원LinearColor lightColor;Vector2 ci..

드디어 몇 번이나 나를 다시 공부하게 만들었던 내적이다. 여태까지가 벡터를 통해 가상공간에서의 물체를 그리고, 움직이고, 변환하는 것에 집중했다면 앞으로 배울 내용들은 더욱 빠르고, 적게 연산하여 물체와 물체간의 상호작용 등을 배워나갈 것이다.벡터의 내적내적은 같은 차원의 두 벡터가 주어졌을 때 각 성분을 곱한 후 더해 스칼라를 만들어내는 연산이다.가령 2차원 벡터와 3차원 벡터의 경우를 확인해보자.이차원 벡터의 내적A-> = (a, b)B-> = (c, d)Dot(A->, B->) => (ac + bd)삼차원 벡터의 내적A-> = (a, b, c)B-> = (d, e, f)Dot(A->, B->) => (ad + be + cf)벡터의 내적은 교환 법칙은 성립하지만 결과가 벡터가 아닌 스칼라로 변환되기 ..

앞서 글에서 말했듯이 벡터의 이동은 같은 차원 내에서는 할 수 없다. 그래서 전단변환을 응용하여 물체의 이동을 구현하려고 사용하게 된 것이 Affine 변환이다. 개념적으로 이동을 표현하려 하는 물체보다 상위 차원을 사용하여 상위차원의 원점을 기준으로 물체의 차원에 해당하는 점들을 전단변환 한 것이다. 이것을 변환 행렬을 통하여 연산하고, 변환 행렬은 다음과 같이 표현된다.아핀공간에서 점과 점을 더하면 차원 상수가 1이라는 것을 보장할 수가 없어진다수식으로 표현하면 P1(x1, y1, 1) + P2(x2, y2, 1) = P3(x1 + x2, y1 + y2, 2)라는 3차원 좌표가 변경되어버린다는 문제가 생긴다. 그렇기 때문에 특정 스칼라 (a, b)를 곱하여 점과 점을 더한다면 차원수를 1로 유지할 수..

아핀공간에서는 한 차원에서 점의 이동을 구현하기 위해 한단계 상위 차원을 이용한다.가령 1차원인 점과 선분의 이동을 표현하기 위해서 2차원 좌표계를 사용하고, 2차원에서의 평면도형의 이동을 구현하기 위해서 삼차원 공간을 사용한다. 그리고 3차원 공간에서 입방체의 이동과 회전을 구현하기 위해 4차원인 쿼터니언을 사용한다.이렇게 상위차원을 이용하는 이유는 벡터의 변환은 늘이거나 줄이거나 할 수는 있지만 항상 원점에 접해야 한다는 대원칙이 존재하기 때문이다. 그렇기 때문에 같은 차원내에서는 항상 원점에서 벗어날 수 없기 때문에 물체의 좌표 자체가 이동할 수 없는 것이다. 그런데 상위 차원을 이용한다면 우리가 눈으로 확인할 수는 없지만 개념적으로 원점에 해당하는 한 좌표가 존재한다고 가정하고 물체의 이동을 구현..