void RenderScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f, 0.0f, zDistance); // 기본 중심 위치에 태양그리기 glRotatef(sphereRotate, 0.0f, 1.0f, 0.0f); makeSun(); // 태양을 중심으로 위치를 계산하기 위해 pushmatrix를 함 glPushMatrix(); // 지구는 몇도를 돌릴까 glRotatef(sphereRotate, 0.0f, 1.0f, 0.0f); // 태양을 중심으로 x축으로 떨어진 정도 glTranslatef(30.0f, 0.0f, 0.0f); makeEarth(); glPushMatrix(); glRotatef(sphereRotate, 0.0f, 1.0f, 0.0f); glTranslatef(0.0f, 0.0f, 20.0f); makeMoon(); glPopMatrix(); glPopMatrix(); glPopMatrix(); sphereRotate += 10.0f; if (sphereRotate > 360.0f) { sphereRotate = 0.0f; } glutSwapBuffers(); }
// Called to draw scene void RenderScene(void) { // Clear the window glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (1 <= iPlanet && iPlanet <= 3) { //background stars display srand((unsigned)time(NULL)); int j = 0; int temp1 = 0; int temp2 = 0; while (j<1000) { j += 1; float x = rand() % 1000; float y = rand() % 750; if (j % 2 == 1) { temp1 = -x; temp2 = -y; x = temp1; y = temp2; } glColor3ub(rand() % 255, rand() % 255, rand() % 255); glBegin(GL_POLYGON); glVertex2f(x, y); glVertex2f(x - 0.1, y - 0.05); glVertex2f(x - 0.15, y - 0.15); glVertex2f(x - 0.1, y - 0.25); glVertex2f(x, y - 0.3); glVertex2f(x + 0.1, y - 0.25); glVertex2f(x + 0.15, y - 0.15); glVertex2f(x + 0.1, y - 0.05); glEnd(); } // Save matrix state and do the rotation glPushMatrix(); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glRotatef(yRot, 0.0f, 1.0f, 0.0f); glColor3ub(230, 50, 0); glutSolidSphere(6.0f, 25, 25); int i = 0; int xpoint = 50; int zpoint = 50; while (i <= 10) { i++; glBegin(GL_LINES); glVertex3d(xpoint, -10, 50); glVertex3d(xpoint, -10, -50); glVertex3d(50, -10, zpoint); glVertex3d(-50, -10, zpoint); glEnd(); xpoint -= 10; zpoint -= 10; } // Restore transformations glPushMatrix(); glRotatef(MercuryY, 0.0f, 1.0f, 0.0f); makeMercury(); glPopMatrix(); glPushMatrix(); glRotatef(VenusY, 0.0f, 1.0f, 0.0f); makeVenus(); glPopMatrix(); glPushMatrix(); glRotatef(EarthY, 0.0f, 1.0f, 0.0f); makeEarth(); glPopMatrix(); glPushMatrix(); glRotatef(MarsY, 0.0f, 1.0f, 0.0f); makeMars(); glPopMatrix(); glPushMatrix(); glRotatef(JupiterY, 0.0f, 1.0f, 0.0f); makeJupiter(); glPopMatrix(); glPushMatrix(); glRotatef(SaturnY, 0.0f, 1.0f, 0.0f); makeSaturn(); glPopMatrix(); glPushMatrix(); glRotatef(UranusY, 0.0f, 1.0f, 0.0f); makeUranus(); glPopMatrix(); glPushMatrix(); glRotatef(NeptuneY, 0.0f, 1.0f, 0.0f); makeNeptune(); glPopMatrix(); glPushMatrix(); glRotatef(PlutoY, 0.0f, 1.0f, 0.0f); makePluto(); glPopMatrix(); glutIdleFunc(spin); glPopMatrix(); }// 태양계 그림일 경우 if 문끝 else if (iPlanet == 4) { glLoadIdentity(); gluLookAt(0.0, 0.0, -5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); //glTranslatef(0.0, 0.0, -5.0); // Z축으로 좀 떨어져서 관측한다. glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); SunRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 5) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); MercuryRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 6) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); VenusRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 7) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); EarthRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 8) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); MarsRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 9) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); JupiterRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 10) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); SaturnRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 11) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); UranusRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 12) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); NeptuneRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } else if (iPlanet == 13) { glPushMatrix(); glRotatef(planetRoz, 0.0f, 0.0f, 1.0f); glRotatef(planetRoy, 0.0f, 1.0f, 0.0f); PlutoRotation(); glBegin(GL_LINES); glColor3ub(0, 255, 0); glVertex3d(0.0, -55.0, 0.0); glVertex3d(0.0, 55.0, 0.0); glEnd(); glutIdleFunc(planetRotate); glPopMatrix(); } // Flush drawing commands glutSwapBuffers(); }