Sono un principiante in OpenGL e sto cercando di creare un gioco in cui come sfondo ho un'immagine grezza. Quando il gioco inizia, visualizzo quell'immagine e voglio poterla cliccare sopra e visualizzare un'altra immagine in seguito. Ho provato a utilizzare la funzione glutMouseFunc
ma quando provo a eseguire il programma, ricevo un messaggio che dice che il programma ha smesso di funzionare. Ecco alcune parti del mio codice: Ho una variabile globale onMouse; se faccio clic con il pulsante del mouse la variabile assume il valore 1 e se ha il valore 1, provo a caricare la seconda immagine.rileva i clic del mouse in OpenGL C++
int onMouse;
void mouseClicks(int button, int state, int x, int y) {
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
onMouse = 1;
}
}
E questa è la funzione principale:
//load first texture
texture = LoadTextureRAW("2 Lock screen.raw", TRUE);
glutMouseFunc(mouseClicks);
if(onMouse == 1){
//load second texture
texture = LoadTextureRAW("in_game.raw", TRUE);
}
Che cosa sto facendo di sbagliato?
EDIT Ho apportato alcune modifiche al codice, ma l'immagine di sfondo continua a non cambiare. Ecco la nuova funzione principale:
glutCreateWindow("Game");
texture = LoadTextureRAW("2 Lock screen.raw", 1);
glutDisplayFunc(display);
glutMouseFunc(mouseClicks);
glutKeyboardFunc(key);
glutMainLoop();
if(onMouse == 1){
texture = LoadTextureRAW("in_game.raw", 2);
glutDisplayFunc(display);
}
E questa è la funzione di visualizzazione in cui mappare la texture a un quad:
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
// setup texture mapping
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2d(1.0,0.0); glVertex3d(1.0,1.0, 1.0);
glTexCoord2d(0.0,0.0); glVertex3d(-1.0,1.0,1.0);
glTexCoord2d(0.0,1.0); glVertex3d(-1.0,-1.0, -1.0);
glTexCoord2d(1.0,1.0); glVertex3d(1.0,-1.0, 1.0);
glEnd();
glPopMatrix();
glutSwapBuffers();
// free the texture
FreeTexture(texture);
La tua domanda riguarda GLUT, non OpenGL. – derpface