刚学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
正牌的天地之灵和他的徒儿们肖赫_王婷婷_王冠_郑燚_孙婷 阅读(176)
评论(2) 编辑 收藏 引用 所属分类:
risky