Jump to content
  • Advertisement
Sign in to follow this  
hiyo

Picking Problem. Urgent!!

This topic is 4905 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, anyone pls help me to see the coding, it is suppose to put a stone on the chess board, i followed by Redbook's simple picksquare,but why i can get the position but the stone is not appear on it.anyone have idea? Thank you. ............... void draw_pieces(void) { GLfloat white[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat black[4] = { 0.0f, 1.0f, 0.0f, 1.0f }; GLfloat *color; int x,z; glPushAttrib(GL_LIGHTING | GL_TEXTURE_BIT); glPushAttrib(GL_TEXTURE_BIT); glEnable(GL_TEXTURE_2D); for (x = 0; x < 11; x++) for (z = 0; z < 11; z++) { if (board[x][z] != -1) { color = board[x][z] == 0 ? white : black; glColor4fv(color); glPushMatrix(); glTranslatef(z * 2.0 - 10, 0.0, 10 - x * 2.0); glCallList(piece); glPopMatrix(); } } glPopAttrib(); } void buildBoard(void) { GLuint i, j; int sq; board_list = glGenLists(1); glNewList(board_list, GL_COMPILE); glPushAttrib(GL_TEXTURE_BIT); glEnable(GL_TEXTURE_2D); for (i = 0; i < 11; i++) { //if (mode==GL_SELECT) glLoadName (i + BOARD_NAME_OFFSET); for (j = 0; j < 11; j ++) { //if(mode==GL_SELECT) glPushName (j + BOARD_NAME_OFFSET); sq = (i * 11) + j; if (sq % 11 == 0) { if (sq == 0) glBindTexture(GL_TEXTURE_2D, textures[3]); else if (sq == 110) glBindTexture(GL_TEXTURE_2D, textures[0]); else glBindTexture(GL_TEXTURE_2D, textures[7]); } else if (sq % 11 == 10) { if (sq == 10) glBindTexture(GL_TEXTURE_2D, textures[2]); else if (sq == 120) glBindTexture(GL_TEXTURE_2D, textures[1]); else glBindTexture(GL_TEXTURE_2D, textures[5]); } else if (sq > 0 && sq < 10) glBindTexture(GL_TEXTURE_2D, textures[6]); else if (sq > 110 && sq < 120) glBindTexture(GL_TEXTURE_2D, textures[4]); else glBindTexture(GL_TEXTURE_2D, textures[8]); /* below translating scheme centers the board in the scene */ glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(j * 2.0f - 11.0f, 0.0f, 11.0f - i * 2.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(j * 2.0f - 9.0f, 0.0f, 11.0f - i * 2.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(j * 2.0f - 9.0f, 0.0f, 9.0f - i * 2.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(j * 2.0f - 11.0f, 0.0f, 9.0f - i * 2.0f); glEnd(); //if(mode==GL_SELECT) glPopName (); } } glPopAttrib(); glEndList(); printf("board_list= %d\n", board_list); } /* processHits prints out the contents of the * selection array. */ void processHits (GLint hits, GLuint buffer[]) { GLint i; GLuint j, ii = 0, jj = 0, names, *ptr; printf ("hits = %d\n", hits); ptr = (GLuint *) buffer; for (i = 0; i < hits; i++) { /* for each hit */ names = *ptr; printf (" number of names for this hit = %d\n", names); ptr++; printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++; printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++; printf (" names are "); for (j = 0; j < names; j++) { /* for each name */ printf ("%d ", *ptr - BOARD_NAME_OFFSET); /* must subtract this to get true [x][y] coordinate */ if (j == 0) /* set row and column */ ii = *ptr; else if (j == 1) jj = *ptr; ptr++; } printf ("\n"); /*board[ii][jj] = (board[ii][jj] + 1) % 3;*/ } } /* pickSquares() sets up selection mode, name stack, * and projection matrix for picking. Then the * objects are drawn. */ #define BUFSIZE 512 void pickSquares(int x, int y) { GLuint selectBuf[BUFSIZE]; GLint hits; GLint viewport[4]; //(void) mouseButtonAction(); glGetIntegerv (GL_VIEWPORT, viewport); glSelectBuffer (BUFSIZE, selectBuf); (void) glRenderMode (GL_SELECT); glInitNames(); glPushName(0); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); /* create 2x2 pixel picking region near cursor location*/ gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y),1.0, 1.0, viewport); gluPerspective(40.0, (GLfloat) viewport[2] / (GLfloat) viewport[3],1.0, 1000.0); //buildBoard(GL_SELECT); glCallList(board_list); //glMatrixMode (GL_PROJECTION); glPopName(); glPopMatrix (); glFlush (); hits = glRenderMode (GL_RENDER); processHits (hits, selectBuf); glMatrixMode(GL_MODELVIEW); glutPostRedisplay(); } ......................

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!