Добрый вечер, начал изучать библиотеку 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;
}
может кто глянуть, в чем может быть проблема? а то уже глаза лопаются, не могу найти ошибку.