Я разрабатываю одиночную настольную игру, в которой есть фигура на квадрат, и каждая фигура может быть двух цветов.Если щелкнуть фрагмент, все четыре смежных элемента (верхний, нижний, левый и правый) изменятся на следующий цвет.
У меня возникают проблемы с определением, в каком фрагменте была нажата мышь.
У меня есть следующий код для обратного вызова мыши:
GLuint selectBuf[BUFSIZE]; // BUFSIZE is defined to be 512
GLint hits;
GLint viewport[4];
if( ( state != GLUT_DOWN ) && ( button != GLUT_LEFT_BUTTON ) )
return;
glGetIntegerv (GL_VIEWPORT, viewport);
glSelectBuffer (BUFSIZE, selectBuf);
(void) glRenderMode (GL_SELECT);
glInitNames();
glPushName(0);
gluPickMatrix ((GLdouble) x, (GLdouble) y, 20.0,20.0, viewport);
draw(GL_SELECT); // the function that does the rendering of the pieces
hits = glRenderMode(GL_RENDER);
processHits (hits, selectBuf); // a function that displays the hits obtained
Теперь у меня проблема в том, что я не совсем знаю, как обрабатывать возникшие попадания, которые находятся на selectBuf.У меня есть следующий код для processHits:
void processHits (GLint hits, GLuint buffer[])
{
unsigned int i, j;
GLuint ii, jj, names, *ptr;
printf ("hits = %d\n", hits);
ptr = (GLuint *) buffer;
for(i = 0; i < hits; i++) {
printf("hit n. %d ---> %d",i, *(buffer+i));
}
}
Наконец, в функции draw
у меня есть:
void draw(GLenum mode) {
glClear (GL_COLOR_BUFFER_BIT);
GLuint x,y;
int corPeca; //colourpiece in english
int corCasa; //colourHouse (each square has a diferent color, like checkers)
for (x =0; x < colunas; x++) { //columns
for(y=0; y < colunas; y++) {
if ( (tabuleiro[y*colunas+x].peca) == 1) //board
corPeca = 1;
else
corPeca = 2;
if((tabuleiro[y*colunas+x].quadrado)==1) //square
corCasa = 1;
else
corCasa = 2;
if (mode == GL_SELECT){
GLuint name = 4;
glLoadName(name);
}
desenhaCasa(x,y,corCasa); //draws square
desenhaPeca(x,y,corPeca, mode); //draws piece
}
}
}
Теперь, вы можете видеть, я только что поставил 4в буфер с glLoadName
.Однако когда я вытаскиваю число в processHits
, я всегда получаю 1. Я знаю, что это из-за структуры буфера, который получает попадания, но какова эта структура и как я могу получить доступ к числу 4?
Большое спасибо за помощь.