新闻  |   论坛  |   博客  |   在线研讨会
OpenGL学习笔记——03
0750long | 2009-07-13 16:22:28    阅读:1802   发布文章

OpenGL学习笔记——03

 

#include <GL/glut.h>
#include <stdlib.h>

static int year = 0, day = 0;

void init()
{
 glClearColor(0.0, 0.0, 0.0, 0.0);
 glShadeModel(GL_FLAT);
}

void change(void)
{
 year = (year + 1) % 360;
 day = (day + 1) % 360;
 glutPostRedisplay();
}

void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0, 1.0, 1.0);

 glPushMatrix();
 glRotatef((GLfloat) year, 0.0, 1.0, 0.0);
 glutWireSphere(1.0, 20, 16);
 glTranslatef(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();
 //glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
 gluPerspective(60.0, (GLfloat) w/(GLfloat)h, 1.0, 20.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluLookAt(0.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void keyboard(unsigned char key, int x, int y)
{
 switch (key)
 {
  
 case 'd' :
  day = (day + 10) % 360;
  glutPostRedisplay();
  break;
 case 'y' :
  year = (year + 10) % 360;
  glutPostRedisplay();
  break;
  
 case 'a':
  glutIdleFunc(change);
  break;
 case 's':
  glutIdleFunc(NULL);
  break;
 default:
  break;
 }
}

int main(int argc, char** argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
 glutInitWindowSize(500, 500);
 glutInitWindowPosition(100, 100);
 glutCreateWindow("OpenGL Test");
 init();
 glutDisplayFunc(display);
 glutReshapeFunc(reshape);
 //glutMouseFunc(mouse);
 glutKeyboardFunc(keyboard);
 glutMainLoop();
 return 0;
}

按A键自动旋转,按S键停止,按D键小球自转,按Y键小球绕着大球转。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客