Opengl/GLUT - obsługa myszy

0

Jak w GLUT'cie mam dodać obsługę myszy ???

0

Mam takie funkcje:

void ruchMychyP(int x,int y)
{
 mouse_x = x;
 mouse_y = y;

 itoa(x, board, 10);
 // to potem wyświetlam
}

//Funckja wywołana po wciśnięciu klawisza 
void mButtonPressed(int button, int state, int x, int y)
{
 mouse_x = x;
 mouse_y = y;
}

I tak je wywołuje:

glutMotionFunc(&ruchMychyP);         // po ruchu myszki z przyciskiem
glutMouseFunc(&mButtonPressed);        // po wciśnięciu przycisku

Ale nic mi się nie wyświetla - czy to w ogóle działa ???

0

Odświeżam

0

Ale nic mi się nie wyświetla - czy to w ogóle działa ???

Myślę że raczej w dokumentacji jest błąd i te funkcje tak naprawdę nic nie robią.

</irony>Jasne że działają, ale wklejasz wycinek kodu który nie robi właściwie nic (+ potem to wyświetlam), więc nie za bardzo jest jak pomóc.

Napisany z pamięci prosty przykład czegoś co powinno coś wyświetlać (poruszanie myszą + LPM)

float x, y;

void display(void) {
    glBegin(GL_POINTS); glVertex2f(x, y); glEnd();
    glutSwapBuffers(); glutPostRedisplay();
}

void motion(int x_, int y_) {
    x = x_ / 400.0 - 1; y = y_ / -300.0 + 1;
}

int main(int argc, char *argv[]) {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Paint 2.0");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
    return 0;
}
0

Funkcja działa ale gdy próbuje wyświetlić położenie myszki to nie idzie.

0

Funkcja działa ale gdy próbuje wyświetlić położenie myszki to nie idzie.

Ech, nie idzie to faktycznie dokładny opis problemu.

Podsumowując, nie działa Ci kod którego nie podałeś, i spodziewasz się odpowiedzi.

Podaj /cały/ kod, wtedy może ktoś będzie w stanie pomóc...

0

Funkcja od ruchu myszy:

void MouseMotion( int x_, int y_ )
{
    x = x_ / 400.0 - 1; y = y_ / -300.0 + 1;
}

Funkcja wyświetlająca napis:

void DrawString( int x, int y, char *board )
{
    // położenie napisu
    glRasterPos2i( x, y );

    // wyświetlenie napisu
    int len = strlen( board );
    for( int i = 0; i < len; i++ )
         glutBitmapCharacter( GLUT_BITMAP_9_BY_15, board[ i ] );     
}

Funkcja ze sceną 3D:

void Display()
{
    // kolor tła - zawartość bufora koloru
    glClearColor( 1.0, 1.0, 1.0, 1.0 );

    // czyszczenie bufora koloru
    glClear( GL_COLOR_BUFFER_BIT );

     glColor3f(0.0, 0.0, 0.0);
     glBegin(GL_POINTS); 
     glVertex2f(x, y); 
     glEnd();

    // skierowanie poleceń do wykonania
    glFlush();

    // zamiana buforów koloru
    glutSwapBuffers();
}

Funkcja główna:

int main( int argc, char * argv[] )
{
    // inicjalizacja biblioteki GLUT
    glutInit( & argc, argv );

    // inicjalizacja bufora ramki
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );

    // rozmiary głównego okna programu
    glutInitWindowSize( width, height );

    // utworzenie głównego okna programu
    #ifdef WIN32

    glutCreateWindow( "Program testowy I" );
    #else

    glutCreateWindow( "Program testowy I" );
    #endif

    // dołączenie funkcji generującej scenę 3D
    glutDisplayFunc( Display );

    // dołączenie funkcji wywoływanej przy zmianie rozmiaru okna
    glutReshapeFunc( Reshape );

    // dołączenie funkcji obsługi klawiatury
    glutKeyboardFunc( Keyboard );

    // dołączenie funkcji obsługi klawiszy funkcyjnych i klawiszy kursora
    glutSpecialFunc( SpecialKeys );

    // obsługa przycisków myszki
    //glutMouseFunc( &MouseButton );

    // obsługa ruchu kursora myszki
    glutMotionFunc(MouseMotion);                // po ruchu myszki z przyciskiem

    // utworzenie menu podręcznego
    glutCreateMenu( Menu );

    // dodanie pozycji do menu podręcznego
    #ifdef WIN32

    glutAddMenuEntry( "Aspekt obrazu - całe okno", FULL_WINDOW );
    glutAddMenuEntry( "Aspekt obrazu 1:1", ASPECT_1_1 );
    glutAddMenuEntry( "Wyjście", EXIT );
    #else

    glutAddMenuEntry( "Aspekt obrazu - cale okno", FULL_WINDOW );
    glutAddMenuEntry( "Aspekt obrazu 1:1", ASPECT_1_1 );
    glutAddMenuEntry( "Wyjscie", EXIT );
    #endif

    // określenie przycisku myszki obsługującej menu podręczne
    glutAttachMenu( GLUT_RIGHT_BUTTON );

    // wprowadzenie programu do obsługi pętli komunikatów
    glutMainLoop();
    return 1;

}
0

Rysowanie wywołuje w funkcji Display.

Dlaczego return 1 ?

A dlaczego return 0 ???

0

Wypróbowałem kilka kombinacji i mi nie idzie.
Jak powinna wyglądać funkcja odpowiadająca za ruch myszą a jak za klikanie np. lewym przyciskiem myszy ???

PS: Jak mam zapętlić program bo on tylko coś robi jak się naciśnie klawisz itd. ???

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