[OpenGL/GLUT] Obrót ścian kostki Rubika za pomocą myszy
Ostatnio zmodyfikowano 2016-01-06 15:28
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: void MouseButton( int button, int state, int x, int y ) { if( button == GLUT_RIGHT_BUTTON ) { button_state = state; 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 ); } } } }
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... |
|
« 1 » |