OpenGL + GLUT - Odczytywanie stanu klawisza LSHIFT || RSHIFT

0

Prosiłbym o poinformowanie mnie, co jest nie tak tym kodem, ponieważ program nie wykrywa wciśnięcia klawisza SHIFT.
Kilka razy program wyłapał jego wciśnięcie, ale TYLKO kilka razy.

glutKeyboardFunc();

void Keyboard(unsigned char key, int x, int y)
{
    if(key == 27) {
        exit(0);
    }

    if(key == 'p') {
        g_fps_mode = !g_fps_mode;

        if(g_fps_mode) {
            glutSetCursor(GLUT_CURSOR_NONE);
            glutWarpPointer(g_viewport_width/2, g_viewport_height/2);
        }
        else {
            glutSetCursor(GLUT_CURSOR_LEFT_ARROW);
        }
    }

    if(glutGetModifiers() == GLUT_ACTIVE_SHIFT) {
        g_shift_down = true;
        printf("active");
    }
    else {
        g_shift_down = false;
    }

    g_key[key] = true;
}

glutTimerFunc();

void Timer(int value)
{
    if(g_fps_mode) {
        if(g_key['w'] || g_key['W']) {
            g_camera.Move(g_translation_speed);
        }
        if(g_key['s'] || g_key['S']) {
            g_camera.Move(-g_translation_speed);
        }
        if(g_key['a'] || g_key['A']) {
            g_camera.Strafe(g_translation_speed);
        }
        if(g_key['d'] || g_key['D']) {
            g_camera.Strafe(-g_translation_speed);
        }
        if(g_shift_down){
            g_camera.Fly(-g_translation_speed);
            printf("Works!       ");
        }
        if(g_key[' ']) {
            g_camera.Fly(g_translation_speed);
        }
    }
    glutTimerFunc(1, Timer, 0);
}
1

https://www.opengl.org/discussion_boards/showthread.php/137151-how-to-use-glutGetModifiers - z tego wynika że nieco źle używasz funkcji glutGetModifiers.

0
czaffik napisał(a):

https://www.opengl.org/discussion_boards/showthread.php/137151-how-to-use-glutGetModifiers - z tego wynika że nieco źle używasz funkcji glutGetModifiers.

Poprawiłem trochę więcej rzeczy, ale dzięki tobie już wiem, gdzie popełniłem błąd. Teraz chyba i tak użyję GLFW. GLUT ma za małe możliwości (nie daje pełnej wolności) i ustawia wszystko na sztywno.

PS: Nie chciało mi się odpowiadać, dlatego tak późno.

0

GLUT to mała biblioteka umożliwiająca tylko tworzenie okna renderującego grafikę opengla i w zasadzie nie da się w tym robić obiektowo, wszystko przez te funkcje zwrotne. GLFW nie znam, polecam na początek poczytać sobie o bibliotekach i wybrać tą która odpowiada twoim oczekiwaniom. Mógłbyś jeszcze wybrać SFML, SDL, Qt ... tyle znam, tylko mała uwaga co do SDL, miałem z nim problem z nieco bardziej skomplikowanymi shaderami, uniform buffer nie chciał łykać intów i nie wiem czemu i często wyskakiwał błąd GL_INVALID_ENUM.

1 użytkowników online, w tym zalogowanych: 0, gości: 1