void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); setCamera(); /*material(slate); glPushMatrix(); glTranslated(0, 0, -40); desenhaSolo(); glPopMatrix();*/ //desenhaEixos(); desenhaLabirinto(); if(estado.eixoTranslaccao) { cout << "Translate... " << estado.eixoTranslaccao << endl; } glFlush(); glutSwapBuffers(); }
void createDisplayLists(int janelaID) { modelo.labirinto[janelaID]=glGenLists(2); glNewList(modelo.labirinto[janelaID], GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT ); desenhaLabirinto(modelo.texID[JANELA_NAVIGATE][ID_TEXTURA_CUBOS]); desenhaLabirinto(modelo.texID[JANELA_TOP][ID_TEXTURA_CUBOS]); glPopAttrib(); glEndList(); modelo.chao[janelaID]=modelo.labirinto[janelaID]+1; glNewList(modelo.chao[janelaID], GL_COMPILE); glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT ); desenhaChao(CHAO_DIMENSAO,modelo.texID[janelaID][ID_TEXTURA_CHAO]); glPopAttrib(); glEndList(); }
int detectCollision(GLfloat xp, GLfloat yp, GLfloat zp){ int i, n, objid = 0; double zmin = 10.0; GLuint buffer[100], *ptr; glSelectBuffer(100, buffer); glRenderMode(GL_SELECT); glInitNames(); glMatrixMode(GL_PROJECTION); glPushMatrix(); // guarda a projecção glLoadIdentity(); //setCamera(); glOrtho(-estado.camera.dim / 2.0, estado.camera.dim / 2.0, -estado.camera.dim / 2.0, estado.camera.dim / 2.0, 0.0, estado.camera.dim / 2.0 + (estado.camera.velv + estado.camera.velh)); //setProjection(x, y, GL_TRUE); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotated(-M_PI/2.0 - atan2(estado.camera.velv,estado.camera.velh),1,0,0); glRotated(M_PI/2.0 - estado.camera.dir_lat,0,0,1); glTranslated(-xp,-yp,-zp); //desenhaEixos(); desenhaLabirinto(); n = glRenderMode(GL_RENDER); if (n > 0) { ptr = buffer; for (i = 0; i < n; i++) { if (zmin >(double) ptr[1] / UINT_MAX) { zmin = (double)ptr[1] / UINT_MAX; objid = ptr[3]; } ptr += 3 + ptr[0]; // ptr[0] contem o número de nomes (normalmente 1); 3 corresponde a numnomes, zmin e zmax } } glMatrixMode(GL_PROJECTION); //repõe matriz projecção glPopMatrix(); glMatrixMode(GL_MODELVIEW); return objid; }
int picking(int x, int y){ int i, n, objid=0; double zmin = 10.0; GLuint buffer[100], *ptr; glSelectBuffer(100, buffer); glRenderMode(GL_SELECT); glInitNames(); glMatrixMode(GL_PROJECTION); glPushMatrix(); // guarda a projecção glLoadIdentity(); setProjection(x,y,GL_TRUE); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); setCamera(); //desenhaEixos(); desenhaLabirinto(); n = glRenderMode(GL_RENDER); if (n > 0) { ptr = buffer; for (i = 0; i < n; i++) { if (zmin > (double) ptr[1] / UINT_MAX) { zmin = (double) ptr[1] / UINT_MAX; objid = ptr[3]; } ptr += 3 + ptr[0]; // ptr[0] contem o número de nomes (normalmente 1); 3 corresponde a numnomes, zmin e zmax } } glMatrixMode(GL_PROJECTION); //repõe matriz projecção glPopMatrix(); glMatrixMode(GL_MODELVIEW); return objid; }