작성자: 김영현(erunc0)

C++ 3D 게임 프로그래밍

----

1. 3D 기초

1.1. 1. 좌표계 사용하기

3D 영역에서의 작업을 위해서는 사용할 좌표계를 정의해야 한다.

가장 일반적인 좌표계인 데카르트 좌표계는 원점으로 사용할 점과 원점을 지나며 서로 지각인 세 개의 축이 있다.

그리고, 이런 데카르트 좌표를 표현할수 있는 구조는.. 다음과 같다.
~cpp 
struct Point3D
{
   float x;
   float y;
   float z;
}

1.1.1. 1.1 폴라 좌표계

"원점에서 동쪽을 바라보며 죽쪽으로 38도 회전하고, 위로 65도 회전한 후에 이 선을 따라 7.47피트로 이동"하는 방법으로 위치를 설명할 수 있다. 그러나, 수학적으로 풀 경우, 점을 이리저리 움직이면 처리하기가 더운 어려워진다. 그래서 이런 폴라 좌표계는 제어가 어렵기 때문에 3D엔진에서는 거의 사용하지 않는다.

1.1.2. 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를 그리는데 사용하는 모든점에 대한 컴퓨터 중앙 만 움직이면 된다.

하나의 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 여덟개 점 중의 하나를 반환한다. 단지 coordindex를 반환한다면, CPU중앙에 해당하는 CPU점을 반환하기 때문에 나중에 CPU를 그랠 때 원하는 대로 그릴 수 없게 된다. 중앙을 움직이면서도 CPU점 여덟개를 모두 옮기는 효과를 낼 수도 있다.

1.2. 2. 3D영역에서 2D컴퓨터 화면으로

역시나 나의 수학의 한계로. 그냥 쓰윽 보면서 넘어 갔다. 뭔소리인지는 모르겠고. ㅋㅋㅋ 그냥 가져다 쓰면 되지. 나중에 궁금하면 더 파볼것이다.

함수를 불러 쓰듯이. 케케.. ㅡㅡ; 어려워.. 해성이형한테 물어봐야지.. --;

1.3. 3. 그래픽 프로그래밍 개요


Retrieved from http://wiki.zeropage.org/wiki.php/C++3DGame
last modified 2021-02-07 05:22:44