작성자: 김영현(["erunc0"])[[BR]] C++ 3D 게임 프로그래밍[[BR]] ---- [[TableOfContents]] == 3D 기초 == === 1. 좌표계 사용하기 === 3D 영역에서의 작업을 위해서는 사용할 좌표계를 정의해야 한다.[[BR]] 가장 일반적인 좌표계인 데카르트 좌표계는 원점으로 사용할 점과 원점을 지나며 서로 지각인 세 개의 축이 있다.[[BR]] 그리고, 이런 데카르트 좌표를 표현할수 있는 구조는.. 다음과 같다. {{{~cpp struct Point3D { float x; float y; float z; } }}} ==== 1.1 폴라 좌표계 ==== "원점에서 동쪽을 바라보며 죽쪽으로 38도 회전하고, 위로 65도 회전한 후에 이 선을 따라 7.47피트로 이동"하는 방법으로 위치를 설명할 수 있다. 그러나, 수학적으로 풀 경우, 점을 이리저리 움직이면 처리하기가 더운 어려워진다. 그래서 이런 폴라 좌표계는 제어가 어렵기 때문에 3D엔진에서는 거의 사용하지 않는다. ==== 1.2 다중 좌표계 사용하기 ==== 3D 오브젝으를 사용하여 작업하다 보면 하나의 점으로 작업하는 것보다 여러 점을 묶어 작업하는 것이 효율적임을 알게 된다. 예를 들어, 컴퓨터를 모델링할 경우 다음 코드와 같은 구조로 저장할수 있다. {{{~cpp struct CPU { Point3D center; // the center of CPU. in world coordinates Point3D coord[8]; // the 8 corners of the CPU box relatives to the center point }; }}} 이렇게 하면 게임에서 CPU를 움직여야 할 경우, CPU를 그리는데 사용하는 모든점에 대한 컴퓨터 중앙 만 움직이면 된다.[[BR]] 하나의 code[] 절대 "세계"좌표를 구하려면 다음과 같은 코드를 사용한다. {{{~cpp struct CPU { Point3D center; Point3D coord[8]; Point3D GetWorldCoord (int index) { Point3D result; result.x = center.x + coord[index].x; result.y = center.y + coord[index].y; result.z = center.z + coord[index].z; return result; } }; }}} CPU::GetWorldCoord(int index)는 그 세계의 원점에 대해 CPU 여덟개 점 중의 하나를 반환한다. 단지 coord[index]를 반환한다면, CPU중앙에 해당하는 CPU점을 반환하기 때문에 나중에 CPU를 그랠 때 원하는 대로 그릴 수 없게 된다. 중앙을 움직이면서도 CPU점 여덟개를 모두 옮기는 효과를 낼 수도 있다. === 2. 3D영역에서 2D컴퓨터 화면으로 === 역시나 나의 수학의 한계로. 그냥 쓰윽 보면서 넘어 갔다. 뭔소리인지는 모르겠고. ㅋㅋㅋ 그냥 가져다 쓰면 되지. 나중에 궁금하면 더 파볼것이다.[[BR]] 함수를 불러 쓰듯이. 케케.. ㅡㅡ; 어려워.. 해성이형한테 물어봐야지.. --; [[BR]] === 3. 그래픽 프로그래밍 개요 ===