Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OpenGL вращение сцены [D7, WinXP]


DFT ©   (2008-07-02 18:31:00) 

Здравствуйте!
Подскажите пожалуйста.
Вопрос на тему OpenGL.
Как с помощью курсора мыши (то есть двух определяемых координат), вращать объемную сцену по трем осям, как это сделано в многих CAD-программах?


DFT   (2008-07-07 17:54:00) [1]

Наконец-то решил проблему.

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

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

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

Всем спасибо за помощь!


han_malign   (2008-07-04 15:07:00) [2]

http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0_%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F


Наверх

Титульная страница Поиск, карта сайта Написать письмо