您好,登錄后才能下訂單哦!
#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> using namespace std; int aa[20][20]; int xx = 0; int yy = 0; int screenWidth = 640; int screenHeight = 480; int cc = 0; /* 全局變量 */ int winWidth( 500 ), winHeight( 500 ); #define MAX_CHAR 128 void Initialization() { glClearColor( 1.0f, 1.0f, 1.0f, 1.0f ); /* 設置背景色為白色 */ } void OnReshape( int w, int h ) { winWidth = w; winHeight = h; glViewport( 0, 0, w, h ); /* 設置視區大小 */ glMatrixMode( GL_PROJECTION ); /* 投影模式 */ glLoadIdentity(); /* 載入單位矩陣以初始化當前矩陣 */ gluOrtho2D( 0, w, 0, h ); /* 將當前繪圖區域設置為二維正交投影 */ glMatrixMode( GL_MODELVIEW ); /* 模型視圖模式 */ glLoadIdentity(); /* 初始化當前矩陣 */ } void drawString( const char* str ) /* 屏幕顯示字體 */ { static int isFirstCall = 1; static GLuint lists; if ( isFirstCall ) { isFirstCall = 0; /* 申請MAX_CHAR個連續的顯示列表編號 */ lists = glGenLists( MAX_CHAR ); /* 把每個字符的繪制命令都裝到對應的顯示列表中 */ wglUseFontBitmaps( wglGetCurrentDC(), 0, MAX_CHAR, lists ); } /* 調用每個字符對應的顯示列表,繪制每個字符 */ for (; *str != '\0'; ++str ) { glCallList( lists + *str ); } } void OnDisplay() { glClear( GL_COLOR_BUFFER_BIT ); glColor3f( 0.0f, 0.0f, 0.0f ); /* 設置字體顏色 */ glRasterPos2i( 0, winHeight - 15 ); /* 起始位置 */ drawString( " Hello,OpenGL." ); /* 輸出的字符串 */ glutSwapBuffers(); /* 交換前后緩存區 */ } void myInit() { 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 ); } void myMouse2( int button, int state, int x, int y ) { 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; } void drawDot( int x, int y ) { 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(); } void myMouse( int button, int state, int x, int y ) { if ( state == GLUT_DOWN ) { if ( button == GLUT_LEFT_BUTTON ) { drawDot( x, screenHeight - y ); glFlush(); }else if ( button == GLUT_RIGHT_BUTTON ) { glClearColor( 1.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT ); glFlush(); } } return; } void myDisplay() { glClear( GL_COLOR_BUFFER_BIT ); /* 清屏 */ glBegin( GL_POINTS ); /* 畫一些點 */ for ( int i = 0; i < 20; i++ ) { for ( int j = 0; j < 20; j++ ) { if ( aa[i][j] == 1 ) glVertex2i( i * 20 + 33, j * 20 + 5 ); } } glEnd(); GLfloat curSizeLine = 2; glLineWidth( curSizeLine ); glBegin( GL_LINES ); for ( int i = 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(); /* 送所有輸出到顯示設備 */ } void funrand() { int s = 4; int x = 0; int y = 0; srand( time( 0 ) ); while ( s-- ) { x = rand() % 20; y = rand() % 20; aa[x][y] = 1; } } int check() { for ( int i = 0; i < 20; i++ ) { for ( int j = 0; j < 20; j++ ) { if ( aa[i][j] == 1 ) return(1); } } return(0); } void main( int argc, 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 有的點確不能 **模糊判斷 ****************/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。