Конференция "Media" » OpenGL вращение сцены [D7, WinXP]
 
  • DFT (02.07.08 18:31) [0]
    Здравствуйте!
    Подскажите пожалуйста.
    Вопрос на тему OpenGL.
    Как с помощью курсора мыши (то есть двух определяемых координат), вращать объемную сцену по трем осям, как это сделано в многих CAD-программах?
  • han_malign © (04.07.08 15:07) [1]
  • DFT (07.07.08 17:54) [2]
    Наконец-то решил проблему.

    Действительно вращение необходимо осуществлять вокруг одной произвольной оси, при этом можно достичь любого удобного положения для просмотра.

    Вот найденный мной пример на С++:

    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);
    }

    Всем спасибо за помощь!
 
Конференция "Media" » OpenGL вращение сцены [D7, WinXP]
Есть новые Нет новых   [134431   +13][b:0][p:0]