Câmera de vôo livre - rotação estranha ao redor do eixo X

Então, quase implementei uma câmera de vôo livre usando vetores e algo como gluLookAt.
O movimento nas quatro direções e a rotação ao redor do eixo Y funcionam bem.

Para orotação ao redor do eixo Y Calculo o vetor entre o olho e o vetor central e depois o giro com a matriz de rotação da seguinte forma:

      Vector temp = vecmath.vector(center.x() - eye.x(),
                    center.y() - eye.y(), center.z() - eye.z());

     float vecX = (temp.x()*(float) Math.cos(-turnSpeed)) + (temp.z()* (float)Math.sin(-turnSpeed));
     float vecY = temp.y();
     float vecZ = (temp.x()*(float) -Math.sin(-turnSpeed))+ (temp.z()*(float)Math.cos(-turnSpeed));

     center = vecmath.vector(vecX, vecY, vecZ);  

No final, apenas coloquei o centro no novo vetor calculado.
Agora, quando eu tento fazer a mesma coisa porrotação ao redor do eixo X ele gira o vetor, mas de uma maneira muito estranha, como se estivesse se movendo em uma linha ondulada.
Eu uso a mesma lógica da rotação anterior, apenas com a matriz de rotação x:

     Vector temp = vecmath.vector(center.x() - eye.x(),
                            center.y() - eye.y(), center.z() - eye.z());

     float vecX = temp.x();
     float vecY = (temp.y()*(float) Math.cos(turnSpeed)) + (temp.z()* (float)-Math.sin(turnSpeed));
     float vecZ = (temp.y()*(float) Math.sin(turnSpeed)) + (temp.z()*(float)Math.cos(turnSpeed));

     center = vecmath.vector(vecX, vecY, vecZ);  

Mas por que isso não funciona? Talvez eu faça algo mais em algum lugar errado?

questionAnswers(1)

yourAnswerToTheQuestion