Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
// 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();
}