OpenGL step to step(2)

这是一个类似于地球绕太阳旋转的demo

原有的例子是用键盘接受事件,我做了修改,使用了timer把他变成一个动态旋转的

#import <Foundation/Foundation.h>
#include <GLUT/GLUT.h>
static int year=0,day=0;
void init()
{
    glClearColor(0,0,0,0);
    glShadeModel(GL_FLAT);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,1,1);
    glPushMatrix();
    glutWireSphere(1,20,16);
    glRotatef((GLfloat)year,0,1,0);
    glTranslated(2,0,0);
    
    glRotatef((GLfloat)day,0,1,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,(GLfloat)w/(GLfloat)h,1,20);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0,0,5,0,0,0,0,1,0);
}

void fishboard()
{
    day=(day+10)%360;
    year=(year+5)%360;
    glutPostRedisplay();
}



void timerProc(int id)
{
    fishboard();
    glutTimerFunc(50,timerProc,1);//需要在函数中再调用一次,才能保证循环
}

int main(int argc,char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("Xcode Glut Demo");
    init();
    
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutTimerFunc(50,timerProc,1);
    
    glutMainLoop();
    return 0;
}
原文地址:https://www.cnblogs.com/fish124423/p/5341896.html