#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]使用简单的视角变化实现太阳和地球的转动
最新推荐文章于 2018-10-31 11:36:41 发布