int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
drawing(GL_RENDER);
return TRUE;
}
void drawing(GLenum mode)
{
GLuint i,j;
for(i=0;i<3;i++)
{
if(mode==GL_SELECT)
glLoadName(i);
for(j=0;j<3;j++)
{
if(mode==GL_SELECT)
glPushName(j);
// glColor3f(0.0f,1.0f,0.0f);
glColor3f((float)i/3.0,(float)j/3.0,0.0f);
glRecti(i,j,i+1,j+1);
if(mode==GL_SELECT)
glPopName();
}
}
}
//对鼠标的响应 对选择的区域进行判断
void pickSquares()
{
GLuint selectBuf[BUFSIZE];
GLint hits;
GLint viewport[4];
int x,y;
x=mouse_x;
y=mouse_y;
glGetIntegerv(GL_VIEWPORT,viewport);
glSelectBuffer(BUFSIZE,selectBuf);
(void)glRenderMode(GL_SELECT);
glInitNames();
glPushName((unsigned)-1);
//glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
gluPickMatrix((GLdouble)x,(GLdouble)(viewport[3]-y),0.5,0.5,viewport);
gluOrtho2D(0.0,3.0,0.0,3.0);
drawing(GL_SELECT);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glFlush();
hits=glRenderMode(GL_RENDER);
}