Jestem początkującym w OpenGL i staram się stworzyć grę, w której jako tło mam surowy obraz. Po uruchomieniu gry wyświetlam ten obraz i chcę go kliknąć, a następnie wyświetlić inny obraz. Próbowałem użyć funkcji glutMouseFunc
, ale kiedy próbuję uruchomić program, pojawia się komunikat, że program przestał działać. Oto niektóre części mojego kodu: Mam zmienną globalną onMouse; jeśli kliknę przycisk myszy, zmienna przyjmuje wartość 1 i jeśli ma wartość 1, próbuję załadować drugi obraz.wykrywanie kliknięć myszy w OpenGL C++
int onMouse;
void mouseClicks(int button, int state, int x, int y) {
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
onMouse = 1;
}
}
I to jest główna funkcja:
//load first texture
texture = LoadTextureRAW("2 Lock screen.raw", TRUE);
glutMouseFunc(mouseClicks);
if(onMouse == 1){
//load second texture
texture = LoadTextureRAW("in_game.raw", TRUE);
}
Co robię źle?
EDYCJA Dokonałem pewnych zmian w kodzie, ale obraz w tle nadal się nie zmienia. Oto nowy Główną funkcją:
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);
}
I to jest funkcja wyświetlania, w którym mapowanie tekstury 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);
Twoje pytanie dotyczy GLUT, a nie OpenGL. – derpface