opengl 第一个小游戏
#include<windows.h>/*Windows的头文件*/#include<gl/gl.h>/*OpenGL32库的头文件*/#include<gl/glu.h>/*GLu32库的头文件*//*#include<gl/glaux.h>//GLaux库的头文件*/#include<gl/glut.h>/*Glut库头文件*/#include<time.h>#include<iostream>usingnamespacestd;intaa[20][20];intxx=0;intyy=0;intscreenWidth=640;intscreenHeight=480;intcc=0;/*全局变量*/intwinWidth(500),winHeight(500);#defineMAX_CHAR128voidInitialization(){glClearColor(1.0f,1.0f,1.0f,1.0f);/*设置背景色为白色*/}voidOnReshape(intw,inth){winWidth=w;winHeight=h;glViewport(0,0,w,h);/*设置视区大小*/glMatrixMode(GL_PROJECTION);/*投影模式*/glLoadIdentity();/*载入单位矩阵以初始化当前矩阵*/gluOrtho2D(0,w,0,h);/*将当前绘图区域设置为二维正交投影*/glMatrixMode(GL_MODELVIEW);/*模型视图模式*/glLoadIdentity();/*初始化当前矩阵*/}voiddrawString(constchar*str)/*屏幕显示字体*/{staticintisFirstCall=1;staticGLuintlists;if(isFirstCall){isFirstCall=0;/*申请MAX_CHAR个连续的显示列表编号*/lists=glGenLists(MAX_CHAR);/*把每个字符的绘制命令都装到对应的显示列表中*/wglUseFontBitmaps(wglGetCurrentDC(),0,MAX_CHAR,lists);}/*调用每个字符对应的显示列表,绘制每个字符*/for(;*str!='\0';++str){glCallList(lists+*str);}}voidOnDisplay(){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0f,0.0f,0.0f);/*设置字体颜色*/glRasterPos2i(0,winHeight-15);/*起始位置*/drawString("Hello,OpenGL.");/*输出的字符串*/glutSwapBuffers();/*交换前后缓存区*/}voidmyInit(){glClearColor(1.0,1.0,1.0,0.0);/*设置背景颜色为亮白*/glColor3f(0.0f,0.0f,0.0f);/*设置绘图颜色为黑色*/glPointSize(4.0);/*设置点的大小为4*4像素*/glMatrixMode(GL_PROJECTION);/*设置合适的矩阵*/glLoadIdentity();gluOrtho2D(0.0,screenWidth,0.0,screenHeight);}voidmyMouse2(intbutton,intstate,intx,inty){if(state==GLUT_DOWN){if(button==GLUT_RIGHT_BUTTON){glClearColor(1.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);glFlush();}}return;}voiddrawDot(intx,inty){xx=(x-30)/20;yy=y/20;glBegin(GL_POINTS);glVertex2i(x,y);/*画一些点*/if(30<x&&x<430&&0<y&&y<400)cc++;/*aa[yy][xx]==0;思路1*/cout<<cc<<endl;if(cc>=4){glVertex2i(450,450);/*思路3*/myMouse2(GLUT_RIGHT_BUTTON,GLUT_DOWN,300,400);}glEnd();}voidmyMouse(intbutton,intstate,intx,inty){if(state==GLUT_DOWN){if(button==GLUT_LEFT_BUTTON){drawDot(x,screenHeight-y);glFlush();}elseif(button==GLUT_RIGHT_BUTTON){glClearColor(1.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);glFlush();}}return;}voidmyDisplay(){glClear(GL_COLOR_BUFFER_BIT);/*清屏*/glBegin(GL_POINTS);/*画一些点*/for(inti=0;i<20;i++){for(intj=0;j<20;j++){if(aa[i][j]==1)glVertex2i(i*20+33,j*20+5);}}glEnd();GLfloatcurSizeLine=2;glLineWidth(curSizeLine);glBegin(GL_LINES);for(inti=0;i<=400;){glVertex3f(30,0.0+i,0.0f);glVertex3f(430,0.0+i,0.0f);glVertex3f(30.0+i,0,0.0f);glVertex3f(30.0+i,400,0.0f);i+=20;}glEnd();glFlush();/*送所有输出到显示设备*/}voidfunrand(){ints=4;intx=0;inty=0;srand(time(0));while(s--){x=rand()%20;y=rand()%20;aa[x][y]=1;}}intcheck(){for(inti=0;i<20;i++){for(intj=0;j<20;j++){if(aa[i][j]==1)return(1);}}return(0);}voidmain(intargc,char**argv){funrand();glutInit(&argc,argv);/*初始化工具包*/glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);/*设置显示模式*/glutInitWindowSize(640,480);/*设置窗口大小*/glutInitWindowPosition(100,150);/*设置窗口在屏幕上的位置*/glutCreateWindow("大家来找茬,找找点");/*打开屏幕窗口//注册回调函数*/Initialization();glutDisplayFunc(myDisplay);glutMouseFunc(myMouse);myInit();glutReshapeFunc(OnReshape);/*重绘函数打印提示信息好难*/glutMainLoop();/*进入循环*/}/******************实现鼠标监听*运行效果为面板上加点**BUG1打点越界*有的点能返回1有的点确不能**模糊判断****************/
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。