-
Здравствуйте! Подскажите пожалуйста. Вопрос на тему OpenGL. Как с помощью курсора мыши (то есть двух определяемых координат), вращать объемную сцену по трем осям, как это сделано в многих CAD-программах?
-
-
Наконец-то решил проблему.
Действительно вращение необходимо осуществлять вокруг одной произвольной оси, при этом можно достичь любого удобного положения для просмотра.
Вот найденный мной пример на С++:
void CDEMOView::OnMouseMove(UINT nFlags, CPoint point) { if ( button_is_down && point != m_point ) { double x = point.x - m_point.x; double y = point.y - m_point.y; if ( nFlags & MK_LBUTTON ) { double t = sqrt ( x*x + y*y ); rotate ( t, y/t, x/t, 0. ); } else if ( nFlags & MK_RBUTTON && sy > 0 ) { double t = 2./sy; move ( x*t, -y*t, 0. ); } m_point = point; } CView::OnMouseMove(nFlags, point); }
void CDEMOView::rotate ( double a, double x, double y, double z ) { glMatrixMode ( GL_MODELVIEW ); double data[16]; glGetDoublev ( GL_MODELVIEW_MATRIX, data ); glLoadIdentity (); glRotated ( a, x, y, z ); glMultMatrixd ( data ); Invalidate(TRUE); }
Всем спасибо за помощь!
|