|
我是一个OpenGL的新手,今天编了一个用鼠标画矩形的例子,但是发现画出来的矩形却不会主动显示出来,需要我把显示窗口最小化再还原以后才能显示,不知是什么问题?下面是我的源码,请大牛们帮帮忙。。。
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
GLfloat x1,y1,x2,y2;
float ww,hh;
int num = 0;//记录已点击鼠标左键次数
GLfloat loc[2][2] = {0};//坐标记录数组
//显示回调函数
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
for(int i=0; i<=num; i+=2)
{
glColor3f(0.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(loc[0], loc[1]);
glVertex2f(loc[0], loc[i+1][1]);
glVertex2f(loc[i+1][0], loc[i+1][1]);
glVertex2f(loc[i+1][0], loc[1]);
glEnd();
glutSwapBuffers();
}
}
//鼠标响应回调函数
void myMouse(int button, int state, int x, int y)
{
//记录鼠标左键当前坐标
if(state == GLUT_DOWN && button == GLUT_LEFT_BUTTON)
{
loc[num][0] = x;
loc[num][1] = hh - y;
num++;
}
}
//初始化函数
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1,1,-1,1);
}
//窗口重构函数
void myReshape(int w, int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLfloat)w,0.0,(GLfloat)h);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,w,h);
ww = w;
hh = h;
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(200,200);
glutInitWindowPosition(500,500);
glutCreateWindow("Mouse");
init();
glutMouseFunc(myMouse);
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
} |
|