2009년 05월 25일
[3D][DirectX] Solar System
과제로 나온 태양계입니다. 과제한지는 꽤 됐는데, 그다지 시간여유가 없었습니다 --;
우선 태양계를 살펴보면 항성인 태양. 지구같은 행성. 달과 같은 위성이 있습니다.
지구는 태양주위를 공전하며, 달은 지구 주위를 공전하죠.
또한 자신조차도 스스로 공전을 합니다.
즉, 혹성은 부모주위를 공전하며, 자전을 하죠.
이것을 정리하여 항성과 행성과 위성을 나타내는 혹성클레스를 정의합니다.
혹성안에는 공전과 자전을 위한 자료. 그리고 자식들의 리스트를 가지고 있습니다.
그리고 혹성의 움직임, 그리기등의 작업은 부모를 통해 자식에게 전해지게 됩니다.
그리기 코드는 다음과 같습니다.
숫자키 1~8을 누르면 각 행성으로 카메라가 이동되며
9번은 상단카메라. 0번은 위에서 비스듬하게 내려다 보는 카메라입니다.
구는 버텍스와 인덱스를 실린더 공식을 이용해서 직접 만들어 주었는데,
회전을 명확히 보기 위해 색상에 노이즈를 넣어봤습니다.
원래는 구 코드도 올릴까 했는데, 이건 나중에 시간되면 올리죠 --;
일단 다음과제 올리는건 건너뛰고(제공된 소스를 활용한 수준이라)
다음에 올릴건 피킹이 되겠군요.. 일단 구현은 완료된 상태...
우선 태양계를 살펴보면 항성인 태양. 지구같은 행성. 달과 같은 위성이 있습니다.
지구는 태양주위를 공전하며, 달은 지구 주위를 공전하죠.
또한 자신조차도 스스로 공전을 합니다.
즉, 혹성은 부모주위를 공전하며, 자전을 하죠.
이것을 정리하여 항성과 행성과 위성을 나타내는 혹성클레스를 정의합니다.
혹성안에는 공전과 자전을 위한 자료. 그리고 자식들의 리스트를 가지고 있습니다.
그리고 혹성의 움직임, 그리기등의 작업은 부모를 통해 자식에게 전해지게 됩니다.
그리기 코드는 다음과 같습니다.
bool CPlanet::Draw(LPDIRECT3DDEVICE9 pD3DDevice, D3DXMATRIXMotherTranslation) {
pD3DDevice->SetTransform(D3DTS_WORLD,
&(SelfRotation* MotherRotation * MotherTranslation));
this->m_pMesh->Render(pD3DDevice);
for(int Count = 0;Count < Child.size(); Count++)
Child[Count]->Draw(pD3DDevice, this->MotherRotation * MotherTranslation);
return true;
}
부모의 위치좌표를 넘겨 받습니다.
그리고 자전회전 * 공전회전 * 부모위치을 차례로 곱해서 혹성의 위치를 구합니다.
자신을 그리면 자전을 제외한 위치행열을 자식에게 전달합니다.
이렇게하면 모든 혹성을 루프를 통해 일괄적으로 넣을수도 있죠.
숫자키 1~8을 누르면 각 행성으로 카메라가 이동되며
9번은 상단카메라. 0번은 위에서 비스듬하게 내려다 보는 카메라입니다.
구는 버텍스와 인덱스를 실린더 공식을 이용해서 직접 만들어 주었는데,
회전을 명확히 보기 위해 색상에 노이즈를 넣어봤습니다.
원래는 구 코드도 올릴까 했는데, 이건 나중에 시간되면 올리죠 --;
일단 다음과제 올리는건 건너뛰고(제공된 소스를 활용한 수준이라)
다음에 올릴건 피킹이 되겠군요.. 일단 구현은 완료된 상태...
# by | 2009/05/25 00:16 | Workshop | 트랙백 | 덧글(0)






☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]