E D R , A S I H C RSS

C++3DGame

작성자: 김영현(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. 그래픽 프로그래밍 개요


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:44
Processing time 0.0290 sec