Advertisement

opengl 行星系统

阅读量:
复制代码
 #include <gl/glut.h>

    
  
    
 static int year=0,day=0;
    
  
    
 void init()
    
 {
    
 	glClearColor(0.0f,0.0f,0.0f,0.0f);
    
 	glShadeModel(GL_FLAT);
    
 }
    
  
    
 void display()
    
 {
    
  
    
 	glClear(GL_COLOR_BUFFER_BIT);
    
 	glColor3f(1.0f,1.0f,1.0f);
    
 	glPushMatrix();
    
 	glutWireSphere(1.0,20,16);
    
 	glRotatef((GLfloat)year,0.0,1.0,0.0);
    
 	glTranslatef(2.0,0.0,0.0);
    
  
    
 	glRotatef((GLfloat)day,0.0,1.0,0.0);
    
 	glutWireSphere(0.2,10,8);
    
 	glTranslatef(1.0,0.0,0.0);
    
 	glRotatef((GLfloat)day,0.0,2.0,0.0);//此处添加了一个行星
    
 	glutWireSphere(0.2,10,8);
    
  
    
 	glPopMatrix();
    
 	glutSwapBuffers();
    
  
    
 }
    
  
    
 void reshape(int w,int h)
    
 {
    
 	glViewport(0,0,(GLsizei)w,(GLsizei)h);
    
 	glMatrixMode(GL_PROJECTION);
    
 	glLoadIdentity();
    
 	gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);
    
 	glMatrixMode(GL_MODELVIEW);
    
 	glLoadIdentity();
    
 	gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,5.0,0.0);
    
  
    
 }
    
  
    
 void keyboard(unsigned char key,int x,int y)
    
 {
    
 	switch(key)
    
 	{
    
 	case 'd':
    
 		day=(day+10)%360;
    
 		glutPostRedisplay();
    
 		break;
    
 	case 'D':
    
 		day=(day-10)%360;
    
 		glutPostRedisplay();
    
 		break;
    
 	case 'y':
    
 		year=(year+5)%360;
    
 		glutPostRedisplay();
    
 		break;
    
 	case 'Y':
    
 		year=(year-5)%360;
    
 		glutPostRedisplay();
    
 		break;
    
 	}
    
 }
    
 void timer(int value)
    
 {
    
 	year=(year+5)%360;
    
 	glutPostRedisplay();
    
 	glutTimerFunc(33,timer,value);//注意必须再次调用,否则此函数只会出发一次。
    
 }
    
 int main(int argc,char** argv)
    
 {
    
 	glutInit(&argc,argv);
    
 	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    
 	glutInitWindowSize(500,500);
    
 	glutInitWindowPosition(100,100);
    
 	glutCreateWindow("planet");
    
 	init();
    
 	glutDisplayFunc(display);
    
 	glutReshapeFunc(reshape);
    
 	glutKeyboardFunc(keyboard);
    
 	glutTimerFunc(33,timer,1);//自己添加了一个timer用于使行星旋转
    
 	glutMainLoop();
    
 	return 0;
    
 }
    
    
    
    
    代码解释

版权所有,未经允许不得擅自拷贝复制程序的部分或全部.

发布自:<>

全部评论 (0)

还没有任何评论哟~