• 검색 결과가 없습니다.

태양계 시뮬레이션

N/A
N/A
Protected

Academic year: 2023

Share "태양계 시뮬레이션"

Copied!
22
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

태양계 시뮬레이션

팀 명 : 복학생

20031385 강유진

20031668 박지혜

(2)

개발환경

개발환경

Windows XP

Visual C++ 6.0 (MFC)

OpenGL

(3)

참고자료

"OpenGL 프로그래밍 ", 우상수 , 사이버출판사 , 1998

" 컴퓨터그래픽스 배움터 ", 최윤철 . 임순범 . 고견 공저 , 생능출판사 , 2003

http://www.solarne.com/

http://www.ultimategameprogramming.com/

http://liftoff.msfc.nasa.gov/academy/space/solarsystem/solarsystemjava.html

http://www.geocities.com/eagle_speaks/SolarSim/Appframe.html

http://www.sssim.com/en/product/studio/download.html

http://grace.chonnam.ac.kr/%7Emelchi/research/opengl/glEvalCoord.html

http://profs.sci.univr.it/~colombar/html_openGL_tutorial/en/index.html

(4)

개발동기

태양계의 공전과 자전에 대한 시뮬레이션

중력개념을 넣은 태양계 시뮬레이션을 개발하기 위한 초기버전

=> 기본모델을 3D 환경에서

구현할 수 있음을 보인다

(5)

배경지식 (1)

태양계란 ?

태양계는 태양을 중심으로 수성 , 금성 ,

지구 , 화성 , 목성 , 토성 , 천왕성 , 해왕

성 , 명왕성으로 구성되어 있으며 각 행성

에는 행성 주위를 도는 위성이 있고 그밖에

소행성 , 혜성이 있다

(6)

배경지식 (2)

실제 태양계의 정보를 이용하여 제작

태양계 자료

공전주기

자전주기

행성반지름

태양과의 거리 ( 타원궤도의 행성도 포함 )

궤도반지름 ( 짧은거리 , 긴거리 )

태양과의 거리에 비해 행성의 크기가

상대적으로 작으므로 행성의 크기 확대

(7)

태양계 기본정보 (1)

(8)

태양계 기본정보 (2)

(9)

타원궤도

타원궤도에서 추가로 필요한 정보

X 축거리

Y 축거리

궤도중심과 태양간거리

원궤도

궤도중심과 태양간거리가 0

X 축거리 =Y 축거리

(10)

궤도평면의 각도

태양계 내의 행성들의 궤도는 비교적 같은 평면상에 있다 . 명왕성만이 일반적인 궤 도평면과 17‘ 기울어져 공전한다 .

Pluto

17`

(11)

실제구현화면

(12)

시스템 사용방법

시점 거리조절 : 마우스 오른쪽 버튼을 누른 상태로 드래그

시점 각도조절 : 마우스 왼쪽 버튼을 누른 상태로 드래그

행성크기 확대 / 축소

‘+’ : 확대

‘-’ : 축소

진행속도 증가 / 감소

‘1’ : 증가

‘2’ : 감소

(13)

시스템 사용방법

거리조절

각도조절

(14)

시스템 사용방법

행성확대 / 축소

(15)

주요효과

뒷면제거 : 보이지 않는 뒷면 그리지 않음

은면제거 : 깊이 검사를 통해 은면제거

조명 : 주변광으로 지정

=> 태양의 경우 스스로 빛을 내기 때문에 조명을 받지 않도록 하였다 .

광원 : 태양의 위치에 광원을 설정하여 난반사광을 지정

텍스처링 : 행성에 비트맵 텍스처를 입힌다

더블버퍼링 : 깜빡거림을 없애기 위해

더블버퍼링을 수행한다

(16)

효과설명

■ 뒷면제거

CChildView::Init() 에서 glEnable(GL_CULL_FACE);

■ 은면제거

CChildView::Init() 에서

glEnable(GL_DEPTH_TEST);

■ 조명

CChildView::Init() 에서 glEnable(GL_LIGHTING);

glLightModelfv(GL_LIGHT_MODEL_AMBIENT,m_ambLight);

주변광을 설정한다 . 행성자체에도 기본적으로 자체적으로 빛을 낸다 .

(17)

효과설명

■ 광원

CChildView::Init() 에서

glLightfv(GL_LIGHT0,GL_DIFFUSE,m_sourceLi ght);

glLightfv(GL_LIGHT0,GL_POSITION,m_lightPo s);

glEnable(GL_LIGHT0);

광원을 태양의 위치에 두고 행성들이 마치 태양에서 빛을 받아 반사하는 듯한 효과를 주게 한다 .

■ 텍스처링

CChildView::ReadTexture()

11 개의 텍스처 ( 태양 , 수성 ... 명왕성 , 궤도선 ) 생성하고 CBmp 클래스를 통해 비트맵 이미지 읽어 텍스처를 생성한다 .

CChildView::Draw() 에서

glBindTexture(GL_TEXTURE_2D, textureid[ORBITLINE]);

glBindTexture(GL_TEXTURE_2D, textureid[i]);

텍스처를 입힐때 그 행성에 해당하는 텍스처를 입혀 야 한다 .

(18)

함수설명

■ SolarSystem 클래스

SolarSystem() : 모든 행성을 생성하고 초기화한다

virtual ~SolarSystem() : 행성을 삭제한다 void Slow() : 진행속도를 느리게 한다 void Fast() : 진행속도를 빠르게 한다 void Clock() : 1 프레임에 해당하는 시간에 행성의 공전 / 자전을 수행한다

■ Planet 클래스

Planet(float,float,float,float) : 원에 가까운 궤도를 가진 행성을 위한 생성자

Planet(float,float,float,float,float,float) : 타원궤도 를 가진 행성을 위한 생성자

float GetRotationAngle() : 현재 자전한 각도를 반 환한다

float GetAngleY(float Angle) : 궤도선을 얻기위해 특정 각도에서의 y 위치를 반환한다

float GetAngleX(float Angle) : 궤도선을 얻기위해 특정 각도에서의 x 위치를 반환한다

float GetY() : 현재 y 위치를 반환한다 float GetX() : 현재 x 위치를 반환한다

float GetRadius() : 행성의 반지름을 반환한다 int GetYear() : 해당 행성의 공전을 1 년으로 하는 행성력 년을 반환한다

void Run(int nCount) : nCount*10 분동안의

(19)

함수설명

■ CBmp 클래스

boolLoadBitmap(char*filename) : 비트맵을 읽어 메모리에 할당한다

void FreeImage() : 할당된 메모리를 해제한다

(20)

함수설명

■ CChildView 클래스

void Init() : 효과를 설정하고 , 구형객체를 생성한다 void Draw() : 태양계 모델을 그린다

void ReadTexture() : 비트맵 텍스처를 읽는다

void OnPaint() : 윈도우 갱신시 Draw() 를 호출하고 , 더블버퍼링을 수행한다

BOOL OnEraseBkgnd(CDC* pDC) : InvalidateRect(NULL) 을 설정하여도 화면이 깜빡거림 을 막기위해 항상 FALSE 로 설정한다

void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) : 키보드조작 처리

int OnCreate(LPCREATESTRUCT lpCreateStruct) : 윈도우 생성시 픽셀포맷을 얻고 , DC 를 오픈지엘과 연결하며 , Init() 를 호출 , 타이머를 설정한다

void OnDestroy() : 타이머를 해제하고 RC 를 삭제하고 , DC 의 사용을 해제한다 . void OnLButtonDown(UINT nFlags, CPoint point) : 각도조절 시작점 설정

void OnLButtonUp(UINT nFlags, CPoint point) : 거리조절 시작점 설정 void OnMouseMove(UINT nFlags, CPoint point) : 각도조절 , 거리조절

void OnSize(UINT nType, int cx, int cy) : 윈도우 사이즈 변경시 뷰포트를 변경한다

(21)

문제점

태양을 투명으로 처리하지 못함

보는 시점의 각도 변경시 약간의 어색함이 있음

보는 시점의 각도 변경시 이전의 변경된 각도를 저장하여 그 위에 또 변경하는 방식으로 해결 가능

배경우주의 텍스처를 입히지 못함

텍스처가 커졌을때 느려지는 현상을 해결 해야함

(22)

감사합니다

*^_____^*

참조

관련 문서

- 추상의 새로운 단계에서는 모든 선행 개념이 사용 가 능한 상태이어야 한다..  스키마에 맞지 않는 것은 학습하기 어렵게 한다.. - 예) 직육면체를 두고

또한 초등학생들의 지구과학 분야 오개념 중 본시에서 다룰 태양의 고도 따른 기 온의 변화 관계를 잘 알지 못하고, 태양의 크기가 커졌다 작아진다든가 혹은

알렌데 운석 화학적 변화의 기록을 보존하고 있는 입자들이 많다 알렌데 운석의 10%가 넘는 물질은 그 나이가 태양계 나이보다 많다.

BLDC 전동기

지구의의 위치에 따라 태양의 남중 고도가 달라지는 경우를 골라 기호를 썼지만 이를 통해 알 수 있는 계 절이 변하는 까닭을 쓰지 못했다.. 하 알맞은 그래프의 형태를

빛이 파동이라는 고전적인 해석에 의하면 전자가 빛을 받을 때 빛을 오래 비추면 많은 에너지가 축적되어 높은 에너지의 전자가

마법의 빛을 밝히는

또한 하나의 주제를 다양한 학 문의 관점에서 바라보게 함으로써 나무가 아닌 숲을 볼 수 있는 눈을 키울 수 있을 것입니다.. STEAM 프로그램의