[OpenGL]使用简单的视角变化实现太阳和地球的转动

#include <gl/glut.h>

static int year=0,day=0;
void init(void){
	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel(GL_FLAT);
	//********************************************************************************************************/
	//GL_FLAT:单调着色。对点,直线或多边形采用一种颜色进行绘制,整个图元的颜色就是它的任何一点的颜色。
	//GL_SMOOTH:平滑着色:用多种颜色进行绘制,每个顶点都是单独进行处理的,各顶点和各图元之间采用均匀插值。
	//********************************************************************************************************/
}

void display(void){
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0,1.0,1.0);
	glPushMatrix();
	glutWireSphere(1.0,20,16);
	//********************************************************************************************************/
	//radius:球体的半径
	//slices:围绕在Z轴周围的线的条数(类似于地球上经线把地球表面分成的一块块“细小部分”)
	//stacks:沿Z轴分布的线的条数(类似于纬线)
	//********************************************************************************************************/
				
	glRotatef((GLfloat)year,0.0,1.0,0.0);
	glTranslated(2.0,0.0,0.0);
	glRotatef((GLfloat)day,0.0,1.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);
	//*****************************************************************/
	//fovy:指定视景体的视野的角度,以度数为单位,y轴的上下方向
	//aspect:指定你的视景体的宽高比(x 平面上)
	//zNear:指定观察者到视景体的最近的裁剪面的距离(必须为正数)
	//zFar:与上面的参数相反,不再啰嗦的翻译了(这个参数也必须是正数)
	//*****************************************************************/

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
	//*****************************************************************/
	//第一组eyex, eyey,eyez 相机在世界坐标的位置
	//第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置
	//第三组upx,upy,upz 相机向上的方向在世界坐标中的方向 
	//*****************************************************************/
}


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;
		
	default:
		break;
	}
}


int main(int argc,char**argv){
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
	glutInitWindowPosition(300,100);
	glutInitWindowSize(800,600);
	glutCreateWindow(argv[0]);
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutKeyboardFunc(keyboard);
	glutMainLoop();
	return 0;
}


你可能感兴趣的:([OpenGL]使用简单的视角变化实现太阳和地球的转动)