PMG

Форумы по созданию игр
Текущее время: 19 апр 2024 11:05

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Поворот Камеры
СообщениеДобавлено: 26 мар 2011 21:16 
Не в сети
Новичок

Зарегистрирован: 26 мар 2011 21:02
Сообщения: 2
Добрый вечер, начал изучать библиотеку OpenGL, все вроде норм, но вот с камерой пока не смог разобраться, хочу сделать камеру на векторах+матрицы и вот тут загвоздка, вроде по примерам из исходников делал, но если камера и поворачивается, то только в пределах одной оси(Х). Вот код обработчика мыши:
Код:
        if(event.type==SDL_MOUSEMOTION)
        {
           MouseEvent(320 - event.motion.x,240 - event.motion.y);
           SDL_WarpMouse(320,240);
        }


Код:
void MouseEvent(int nHeading, int nPitch)
{
   static int m_nHead;
   static int m_nPitch;
   m_nHead+=nHeading;
   m_nPitch+=nPitch;

   if(nHeading!=0)
   {
      g_matRot.Rotate(m_nHead,g_vecUp);

   }

   if(nPitch!=0)
   {
      g_matRot.Rotate(m_nPitch,g_vecRight);
   }
}


Вот код расчета матрицы поворота:
Код:
void CMatrix4x4f::Rotate(const float& fAngle, CVector3f& vecRot)
{
    float SinA=sin(fAngle*(3.1415/180.0));
    float CosA=cos(fAngle*(3.1415/180.0));

    vecRot.Normalize();

    float fX = vecRot.GetX();
    float fY = vecRot.GetY();
    float fZ = vecRot.GetZ();

    m_fMat[0]=CosA+(1-CosA)*fX*fX;
    m_fMat[4]=(1-CosA)*fY*fX+SinA*fX;
    m_fMat[8]=(1-CosA)*fZ*fX-SinA*fY;
    m_fMat[12]=0;

    m_fMat[1]=(1-CosA)*fX*fY-SinA*fX;
    m_fMat[5]=CosA+(1-CosA)*fY*fY;
    m_fMat[9]=(1-CosA)*fZ*fY+SinA*fX;
    m_fMat[13]=0;

    m_fMat[2]=(1-CosA)*fX*fZ+SinA*fY;
    m_fMat[6]=(1-CosA)*fY*fZ-SinA*fX;
    m_fMat[10]=CosA+(1-CosA)*fX*fX;
    m_fMat[14]=0;

    m_fMat[3]=0;
    m_fMat[7]=0;
    m_fMat[11]=0;
    m_fMat[15]=1;
}


может кто глянуть, в чем может быть проблема? а то уже глаза лопаются, не могу найти ошибку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поворот Камеры
СообщениеДобавлено: 26 мар 2011 22:17 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Не могу понять зачем самому рассчитывать матрицу CMatrix4x4f::Rotate. OGL сам рассчитывает матрицу, надо только задать угол и ось.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поворот Камеры
СообщениеДобавлено: 26 мар 2011 22:24 
Не в сети
Новичок

Зарегистрирован: 26 мар 2011 21:02
Сообщения: 2
я хз. просто в примерах что я видел делались самостоятельные расчеты, вот и я решил попробывать, только что то не оч получается.
------------------------------


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поворот Камеры
СообщениеДобавлено: 27 мар 2011 16:23 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Не заморачивайся с синусами, просто делай glRotatef (http://pmg.org.ru/nehe/nehe09.htm).

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поворот Камеры
СообщениеДобавлено: 11 май 2011 16:55 
Не в сети
Любитель

Зарегистрирован: 19 янв 2010 15:58
Сообщения: 14
Откуда: Комсомольск-на-Амуре
Когда мне нужно было сделать поворот исходя сразу из трех углов (вокруг произвольного вектора), пересчитать матрицу оказалось проще чем поворачивать по каждой оси.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB