Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL/GLUT] Obrót ścian kostki Rubika za pomocą myszy

Ostatnio zmodyfikowano 2016-01-06 15:28
Autor Wiadomość
veelenar
Temat założony przez niniejszego użytkownika
[OpenGL/GLUT] Obrót ścian kostki Rubika za pomocą myszy
» 2016-01-06 15:28:47
Z racji bycia totalnym laikiem w dziedzinie OpenGL zwracam się znów o pomoc, tym razem moim problemem jest zrobienie obrotu pojedynczej ściany za pomocą myszy. W zamyśle jest to przeciąganie myszy po odpowiedniej płaszczyźnie w poziomie lub pionie przytrzymując lewy przycisk myszy. Muszę zaznaczyć, iż wszystkie kostki są rysowane w oddzielnych macierzach modelowania, ale nie wiem, czy w tej sytuacji to coś komplikuje, bo obroty jako takie działają niemal bez zarzutu(jedyny problem leży w nieodpowiednim ustalaniu kolorów po niektórych obrotach, ale o tym pisałem w innym temacie).

Póki co jeśli chodzi o obsługę myszy mam takie funkcje:

C/C++
void MouseButton( int button, int state, int x, int y )
{
    if( button == GLUT_RIGHT_BUTTON )
    {
        // zapamiętanie stanu prawego przycisku myszki
        button_state = state;
       
        // zapamiętanie położenia kursora myszki
        if( state == GLUT_DOWN )
        {
            button_x = x;
            button_y = y;
        }
    }
    else if( button == GLUT_LEFT_BUTTON )
    {
        if( state == GLUT_DOWN )
        {
            if( os == osObrotu::z ) {
                ObrocMacierzSciany( os, lewo, rotateWallDepth );
            }
            else
            {
                ObrocMacierzSciany( os, prawo, rotateWallDepth );
            }
        }
    }
}

// obsługa ruchu kursora myszki

void MouseMotion( int x, int y )
{
    if( GLUT_RIGHT_BUTTON )
    {
        if( button_state == GLUT_DOWN )
        {
            rotatey += 10.1 *( right - left ) / glutGet( GLUT_WINDOW_WIDTH ) *( x - button_x );
            button_x = x;
            rotatex -= 10.1 *( top - bottom ) / glutGet( GLUT_WINDOW_HEIGHT ) *( button_y - y );
            button_y = y;
        }
    }
    else if( GLUT_LEFT_BUTTON )
    {
        if( button_state == GLUT_DOWN )
        {
            rotateWall += 1.0 * glutGet( GLUT_WINDOW_WIDTH );
            button_x = x;
            rotateWall += 1.0 * glutGet( GLUT_WINDOW_HEIGHT );
            button_y = y;
        }
    }
}
 
Po kliknięciu lewego przycisku myszy zmieniają się kolory na kostce, lecz tylko wokół jednej osi, w jednym kierunku i bez animacji obrotu. Baardzo proszę o pomoc, deadline mam na jutro...
P-142976
« 1 »
  Strona 1 z 1