剛學(xué)OpenGL沒有多久就寫了一個(gè)小程序,希望畫一個(gè)三角形然后用鼠標(biāo)控制它上下左右移動(dòng),當(dāng)時(shí)程序時(shí)寫出來了的,但可惜的是無論你按什么鍵,三角形都無法移動(dòng),那個(gè)程序就擱淺了一段時(shí)間。下午的時(shí)候感覺是時(shí)候了,遂重新寫了一遍。中間出現(xiàn)了許多顯而易見的以至于我認(rèn)為我從來都不會(huì)犯的小錯(cuò)誤,很幸運(yùn)的是這些都被我發(fā)現(xiàn)并改掉了。但這些個(gè)錯(cuò)誤改掉之后,三角形依然無法移動(dòng)。無奈之余去吃晚飯,大概是晚飯回來之后吧,又在網(wǎng)上逛了好多遍,查了老些資料。在一次偶然的運(yùn)行下,我驚奇的發(fā)現(xiàn)了它竟然動(dòng)了,高興之余把左右下的鍵全給附上了事件(暫且稱之為事件),然后再次運(yùn)行竟然又驚奇的發(fā)現(xiàn)它又不動(dòng)了。遂又花了老長(zhǎng)的時(shí)間搗鼓這個(gè)程序,還是解決不了,只好請(qǐng)教婷婷。好長(zhǎng)時(shí)間過去了,沒有得到回復(fù),就在我“心灰意冷”的時(shí)候,她給我檢測(cè)出來了錯(cuò)誤。原來我的全局變量取名x,y和keyboard(unsigned key ,int x ,int y)里面的x,y重復(fù)了。當(dāng)時(shí)知道了這個(gè)錯(cuò)誤之后我心里那個(gè)不好受啊,這可是低級(jí)錯(cuò)誤啊,竟然犯了,以前寫其它的程序的時(shí)候可都沒犯過啊。但婷婷說這不是低級(jí)錯(cuò)誤而是經(jīng)驗(yàn),想想也是哦,自己才寫了多少代碼,大家編寫程序的時(shí)候遇到的程序何止千千萬萬,我才遇到幾個(gè)啊。
這幾乎是一下午加班個(gè)晚上的勞動(dòng)成果,貼上來給大家分享分享。

只是還發(fā)現(xiàn)一個(gè)問題,就是按下a鍵,它不是向左移動(dòng),而是向右移動(dòng),同樣按d鍵而是向左移動(dòng)。
#include <stdlib.h>
#include <gl/glut.h>
//#include <windows.h>
GLfloat i=0.0,j=0.0;
void init()


{
glClearColor(0.0,0.0,0.0,0.0);
glColor3f(0.2f,0.8f,0.6f);
}
void draw()


{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0.0,0.0);
glVertex2f(0.5,0.0);
glVertex2f(0.5,0.5);
glEnd();
glutSwapBuffers();
}
void display()


{
glPushMatrix();
glLoadIdentity();
glTranslatef(i,j,0);
draw();
glPopMatrix();
glFlush();
}

void keyboard(unsigned char key,int x,int y)


{
switch(key)

{
case 'w':
case 'W':
j+=0.1;
if(j>0.5)
j=0.5;
//display();
glutPostRedisplay();
break;
case 's':
case 'S':
j-=0.1;
if(j<-1.0)
j=-1.0;
//display();
glutPostRedisplay();
break;
case 'a':
case 'A':
i+=0.1;
if(i>0.5)
i=0.5;
//display();
glutPostRedisplay();
break;
case 'd':
case 'D':
i-=0.1;
if(i<-1.0)
i=-1.0;
//display();
glutPostRedisplay();
break;
default :
exit(0);
break;
}
}
int main(int argc,char *argv[])


{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
好了就寫到這里,繼續(xù)OpenGL,繼續(xù)瑪麗醫(yī)生。