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