OpenGL编程指南10:组合运动示例1—创建太阳系模型
生活随笔
收集整理的這篇文章主要介紹了
OpenGL编程指南10:组合运动示例1—创建太阳系模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.程序代碼:
#include <vgl.h> static int year =0, day =0;void init(void) {glClearColor(0.0,0.0,1.0,0.0); //清除背景底色glShadeModel(GL_FLAT); } void display(void) {glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.5,0.5,0.5); //相當于畫筆glPushMatrix(); glRotatef((GLfloat)year, 0.0, 1.0, 0.0);glutWireSphere(1,30,24); //sun: radius longtitude latitudeglPopMatrix(); glPushMatrix();glRotatef((GLfloat)year,-1,1,0);glTranslatef(3.0, 0.0, 0.0); glTranslatef(0.0, 3.0, 0.0); glRotatef((GLfloat)day, -1.0, 1.0, 0.0);glutWireSphere(0.3,10,8);glPopMatrix();glPushMatrix();glRotatef((GLfloat)year,1,1,0);glTranslatef(2.0,0.0,0.0); glTranslatef(0.0,-2.0,0.0); glRotatef((GLfloat)day,1,1,0);glutWireSphere(0.3,10,8);glPopMatrix();glutSwapBuffers(); }void reshape(int w,int h) {glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,20.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0,0.0,6.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 '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_DOUBLE | GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(200,200);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0; }2.說出結果
總結
以上是生活随笔為你收集整理的OpenGL编程指南10:组合运动示例1—创建太阳系模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL编程指南8:模型组合变换
- 下一篇: 飞鸽传书计算乘积的聚合函数跑哪去了呢?