Como obter a posição do mouse em uma Janela OpenGL

 
 

Com relação ao mouse, a GLUT permite que se obtenha suas coordenadas em três situções:

  • quando um dos botões fore pressionado ou liberdado sobre a janela OpenGL;
  • quando o mouse mover-se na tela e nenhum botão estiver pressionado sobre a janela OpenGL;
  • quando um dos botões estiver pressionado e o mouse for movido sobre a janela OpenGL.
  •  
    // **************************************************
    // Função chamada quando o mouse é pressionado
    // ou liberado
    // **************************************************
    void MouseClick (int button, int state, int x, int y)
    {
        switch (button)
        {
            case GLUT_LEFT_BUTTON: printf("Botao esquerdo.");
                                   break;
            case GLUT_RIGHT_BUTTON: printf("Botao direito.");
                                   break;
            case GLUT_MIDDLE_BUTTON: printf("Botao do meio.");
                                   break;
        }
        if (state == GLUT_DOWN)
            printf("Pressionado na posição: ");
        if (state == GLUT_UP)
            printf("Liberado na posição: ");
        printf("(%d, %d)\n", x,y);
    }
    // **************************************************
    // Função chamada quando o mouse anda sobre a janele
    // e NÃO HÁ botão pressionado
    // **************************************************
    void MouseAndandoNaoPressionado (int x, int y)
    {
        printf("Mouse ANDANDO solto na janela. Posição: (%d, %d)\n", x,y);
    }
    // **************************************************
    // Função chamada quando o mouse anda sobre a janele
    // e HÁ botão pressionado
    // **************************************************
    void MouseAndandoPressionado (int x, int y)
    {
        printf("Mouse ANDANDO pressionado na janela. Posição: (%d, %d)\n", x,y);
    }

    // **************************************************
    // Programa principal
    // **************************************************
    void main(void)
    {
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        // define o tamnaho da janela na tela
        glutInitWindowSize(400,350);
        // posiciona a janela na tela
        glutInitWindowPosition(10,10);
        // define o título da janela
        glutCreateWindow("Programa Exemplo para controle do mouse");
        // define a rotina de exibição dos objetos OpenGL
        glutDisplayFunc(RenderScene);
     
        glutReshapeFunc(ChangeSize);

        // Define as funções de MOUSE
     
        // movimento SEM botão pressionado
        glutPassiveMotionFunc(MouseAndandoNaoPressionado);

        // movimento COM botão pressionado
        glutMotionFunc(MouseAndandoPressionado);

        // Click em um botão
        glutMouseFunc(MouseClick);
     

        SetupRC();
        glutMainLoop();
    }
     

    Programa Exemplo (para o DEVCPP)