⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 学习c++必备
💻 C
字号:
/* * main.c - part of the chess demo in the glut distribution. * * (C) Henk Kok (kok@wins.uva.nl) * * This file can be freely copied, changed, redistributed, etc. as long as * this copyright notice stays intact. */#include <stdlib.h>#include <GL/glut.h>#include <math.h>#include "chess.h"/* Some <math.h> files do not define M_PI... */#ifndef M_PI#define M_PI 3.14159265358979323846#endif#define M_TEXTURING	1#define M_REFLECTION	2#define M_CHAOS		3#define M_ANIMATION	4extern int reflection, texturing, animating, chaos;GLfloat lightpos[4] = { 2.0, 1.0, 1.0, 0.0 };GLfloat lightamb[4] = { 1.0, 1.0, 1.0, 1.0 };GLfloat lightdif[4] = { 1.0, 1.0, 1.0, 1.0 };float angle = 0.0, a2 =  45.0;int speed = 0;GLfloat px = -3.5, py = -16.5, pz = 9.5;void SetCamera(void){    gluLookAt(0.0,2.0,2.0, 0.0,2.0,0.0, 0.0,1.0,0.0);    glRotatef(a2, 1.0, 0.0, 0.0);    glRotatef(angle, 0.0, 1.0, 0.0);    glTranslatef(px, -pz, py);    glLightfv(GL_LIGHT0, GL_POSITION, lightpos);}void display(void){    glLoadIdentity();    SetCamera();    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);    do_display();    glutSwapBuffers();}void myinit(void){    glShadeModel (GL_SMOOTH);    glFrontFace(GL_CCW);    glEnable(GL_DEPTH_TEST);    glLoadIdentity();    glClearColor(0.0, 0.0, 0.0, 1.0);    glLightfv(GL_LIGHT0, GL_POSITION, lightpos);    glLightfv(GL_LIGHT0, GL_AMBIENT, lightamb);    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightdif);    glEnable(GL_LIGHTING);    glEnable(GL_LIGHT0);    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);    init_lists();}void Animate(void){    px -= speed * 0.02 * sin(angle*M_PI/180);    py += speed * 0.02 * cos(angle*M_PI/180);    if (animating)	proceed();    glutPostRedisplay();}extern int chaosPieces;/* ARGSUSED1 */void parsekey(unsigned char key, int x, int y){    switch (key)    {	case 27: exit(0);	case 13: speed = 0; break;	case 'a': a2 += 5; break;	case 'z': a2 -= 5; break;	case 'A': pz += 0.5; break;	case 'Z': pz -= 0.5; break;        default:	    return;    }    glutPostRedisplay();    if (animating || (chaosPieces > 0) || (speed != 0))           glutIdleFunc(Animate);    else          glutIdleFunc(NULL);}/* ARGSUSED1 */void parsekey_special(int key, int x, int y){    switch (key)    {	case GLUT_KEY_UP:	speed += 1; break;	case GLUT_KEY_DOWN:	speed -= 1; break;	case GLUT_KEY_RIGHT:	angle += 5; break;	case GLUT_KEY_LEFT:	angle -= 5; break;	case GLUT_KEY_HOME:            angle = 0.0, a2 =  45.0;            speed = 0;            px = -3.5, py = -16.5, pz = 9.5;            break;        default:	    return;    }    glutPostRedisplay();    if (animating || (chaosPieces > 0) || (speed != 0))           glutIdleFunc(Animate);    else          glutIdleFunc(NULL);}void handle_main_menu(int item){    switch(item) {    case M_REFLECTION:	reflection = !reflection;        glutPostRedisplay();	break;    case M_TEXTURING:	texturing = !texturing;        glutPostRedisplay();	break;    case M_ANIMATION:	animating = !animating;	if (animating || (chaosPieces > 0) || (speed != 0))           glutIdleFunc(Animate);	else          glutIdleFunc(NULL);	break;    case M_CHAOS:	chaos = !chaos;	if (animating || chaos || (speed != 0))           glutIdleFunc(Animate);	break;    }}voidVisible(int visible){  if (visible == GLUT_VISIBLE) {    if (animating || (chaosPieces > 0) || (speed != 0))      glutIdleFunc(Animate);  } else {    glutIdleFunc(NULL);  }}void myReshape(int w, int h){    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    glFrustum (-0.1, 0.1, -0.1, 0.1, 0.3, 200.0);    glMatrixMode (GL_MODELVIEW);    glViewport(0, 0, w, h);    glLoadIdentity();    SetCamera();}int main(int argc, char *argv[]){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE | GLUT_STENCIL);    glutCreateWindow("Chess");    glutDisplayFunc(display);    glutInitWindowPosition(200, 0);    glutInitWindowSize(300, 300);    glutKeyboardFunc(parsekey);    glutSpecialFunc(parsekey_special);    glutReshapeFunc(myReshape);    glutVisibilityFunc(Visible);    myinit();    glutCreateMenu(handle_main_menu);    glutAddMenuEntry("Toggle texturing", M_TEXTURING);    glutAddMenuEntry("Toggle reflection", M_REFLECTION);    glutAddMenuEntry("-----------------", -1);    glutAddMenuEntry("Toggle animation", M_ANIMATION);    glutAddMenuEntry("Toggle CHAOS!", M_CHAOS);    glutAttachMenu(GLUT_RIGHT_BUTTON);     glutSwapBuffers();    glutMainLoop();    return 0;             /* ANSI C requires main to return int. */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -