- 积分
- 23
- 帖子
- 7
- 主题
- 6
- 精华
- 0
- 最后登录
- 2009-9-16
- 在线时间
- 2 小时
- 私信
|
发表时间 : 2009-1-1 22:30:02
|
浏览 : 1395 评论 : 1
下面是一个拾取的程序 我想只有在点击到那个矩形的时候才改变颜色 可是不知道是什么地方出了问题 不论我点什么地方都会使其改变 希望大家帮我看看 最好告诉我原因
谢谢大家了
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
GLfloat temp = 0.0f;
void init(void)
{
//int i, j;
//for (i = 0; i < 3; i++)
// for (j = 0; j < 3; j ++)
// board[j] = 0;
glClearColor (0.0, 0.0, 0.0, 0.0);
}
void drawSquares(GLenum mode)
{
if (mode == GL_SELECT)
glLoadName(0);
glColor3f (0.5f,0.5f,temp);
glRectf (1.5f, 1.5f, 2.0f, 2.0f);
if (mode == GL_SELECT)
glPopName();
}
#define BUFSIZE 512
void pickSquares(int button, int state, int x, int y)
{
GLuint selectBuf[BUFSIZE];
GLint hits;
GLint viewport[4];
if (button != GLUT_LEFT_BUTTON || state != GLUT_DOWN)
return;
glGetIntegerv (GL_VIEWPORT, viewport);
glSelectBuffer (BUFSIZE, selectBuf);
(void) glRenderMode (GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode (GL_PROJECTION);
glPushMatrix ();
glLoadIdentity ();
/* create 5x5 pixel picking region near cursor location */
gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y),
1.0, 1.0, viewport);
gluOrtho2D (0.0, 3.0, 0.0, 3.0);
drawSquares (GL_SELECT);
glMatrixMode (GL_PROJECTION);
glPopMatrix ();
glFlush ();
hits = glRenderMode (GL_RENDER);
if (temp <= 1.0f)
{
temp += 0.1;
}
else
{
temp = 0.0f;
}
//processHits (hits, selectBuf);
glutPostRedisplay();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
drawSquares (GL_RENDER);
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (0.0, 3.0, 0.0, 3.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (640, 480);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutReshapeFunc (reshape);
glutDisplayFunc(display);
glutMouseFunc (pickSquares);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
} |
|