Matrix(); glLoadIdentity(); gluOrtho2D(0, w, 0, h); glScalef(1, -1, 1); glTranslatef(0, -h, 0); glMatrixMode(GL_MODELVIEW); } void resetPerspectiveProjection() { glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } //光源的坐标变化 void SpecialKeys(int key, int x, int y) { if(key == GLUT_KEY_UP) xRot-= 5.0f; if(key == GLUT_KEY_DOWN) xRot += 5.0f; if(key == GLUT_KEY_LEFT) yRot -= 5.0f; if(key == GLUT_KEY_RIGHT) yRot += 5.0f; if(key > 356.0f) xRot = 0.0f; if(key < -1.0f) xRot = 355.0f; if(key > 356.0f) yRot = 0.0f; if(key < -1.0f) yRot = 355.0f; glutPostRedisplay(); } //鼠标事件 void Mouse(int button,int state, int x, int y) { if (state == GLUT_DOWN)//鼠标按下 { if (x<0) { //向左旋转 yRot -= 5.0f; }else if (x>=0) { //向右旋转 yRot += 5.0f; }else if (y>=0) { //向上旋转 xRot-= 5.0f; }else if (y<0) { //向下旋转 xRot += 5.0f; } if(xRot> 356.0f) xRot = 0.0f; if(xRot < -1.0f) xRot = 355.0f; if(yRot > 356.0f) yRot = 0.0f; if(yRot < -1.0f) yRot = 355.0f; glutPostRedisplay(); } } //时间函数,定时刷新 void TimerFunction(int value) { display(); glutPostRedisplay(); glutTimerFunc(33,TimerFunction, 1); } //主函数 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (800, 600); glutInitWindowPosition (100, 100); glutCreateWindow("机器人 按W向前走 按s向后走 按a向左转 按d向右转 按p可以自行转动"); SetupRC(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutSpecialFunc(SpecialKeys); glutMouseFunc(Mouse); glutTimerFunc(33, TimerFunction, 1); // glutIdleFunc(display); glutMainLoop(); return 0; }
|