Opengl/GLUT - obsługa myszy

Odpowiedz Nowy wątek
2013-04-10 18:14
0

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


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-04-10 18:21
0

ekhm... Kurs programowania GLUT

Pozostało 580 znaków

2013-04-11 17:12
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 ???


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
edytowany 1x, ostatnio: kacper546, 2013-04-11 17:13

Pozostało 580 znaków

2013-04-12 15:53
0

Odświeżam


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-04-12 17:20
msm
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;
}

Pozostało 580 znaków

2013-04-15 11:40
0

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


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

2013-04-15 14:35
msm
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...

Pozostało 580 znaków

2013-04-15 15:32
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;

}

Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
Nie znam sie na tej bibliotece, ale gdzie wywolujesz to rysowanie? - n0name_l 2013-04-15 15:38
Dlaczego return 1? - Endrju 2013-04-15 15:38
@n0name_l: glutMainLoop wywołuje w pętli funkcję podaną w glutDisplayFunc. - Azarien 2013-04-17 21:45
@Azarien tego sie akurat domyslilem, ale funkcja Display nie wywoluje nigdzie jawnie funkcji DrawString() stad moje lekkie zmieszanie ;) - n0name_l 2013-04-18 07:17

Pozostało 580 znaków

2013-04-16 11:14
0

Rysowanie wywołuje w funkcji Display.

Dlaczego return 1 ?

A dlaczego return 0 ???


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
To nie jest wartosc przypadkowo, po prostu sie przyjelo, ze aplikacja w przypadku powodzenia zwraca wartosc 0 do systemu, wtedy chociazby przy dziwnym dzialaniu mozna wywolac echo $errorlevel, etc. - n0name_l 2013-04-16 21:13
Aha, postaram się zapamiętać. - kacper546 2013-04-16 21:15

Pozostało 580 znaków

2013-04-16 20:58
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. ???


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
edytowany 1x, ostatnio: kacper546, 2013-04-16 21:18

Pozostało 580 znaków

2013-04-17 21:20
0

Help me


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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