26

juppi!!!
udało się znaleźć rozwiązanie. Tak jak przypuszczałem na początku okazało się, że aby obrócić kamerę wokół własnych osi trzeba przemnożyć ruchome osie przez wartości cos i sin , rozwiązanie znalazłem na tej ciekawej stronce z tutorkami opengl

A tutaj kod w C++:

void CCamera::RotateX (GLfloat Angle)
{
    RotatedX += Angle;
    
    //Rotate viewdir around the right vector:
    ViewDir = Normalize3dVector(ViewDir*cos(Angle*PIdiv180)
                                + UpVector*sin(Angle*PIdiv180));

    //now compute the new UpVector (by cross product)
    UpVector = CrossProduct(&ViewDir, &RightVector)*-1;

    
}

void CCamera::RotateY (GLfloat Angle)
{
    RotatedY += Angle;
    
    //Rotate viewdir around the up vector:
    ViewDir = Normalize3dVector(ViewDir*cos(Angle*PIdiv180)
                                - RightVector*sin(Angle*PIdiv180));

    //now compute the new RightVector (by cross product)
    RightVector = CrossProduct(&ViewDir, &UpVector);
}

void CCamera::RotateZ (GLfloat Angle)
{
    RotatedZ += Angle;
    
    //Rotate viewdir around the right vector:
    RightVector = Normalize3dVector(RightVector*cos(Angle*PIdiv180)
                                + UpVector*sin(Angle*PIdiv180));

    //now compute the new UpVector (by cross product)
    UpVector = CrossProduct(&ViewDir, &RightVector)*-1;

Dzięki za zainteresowanie tematem,
pozdrawiam