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

只是還發現一個問題,就是按下a鍵,它不是向左移動,而是向右移動,同樣按d鍵而是向左移動。
#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;
}
好了就寫到這里,繼續OpenGL,繼續瑪麗醫生。
posted on 2008-10-23 21:07
正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(182)
評論(2) 編輯 收藏 引用 所屬分類:
risky