Yes! I found it!
No need for any matrix operations at all. I watched the Cassini Division movie and those guys had a web site at the end of the movie, there I found cassini.cpp and this simple code to rotate the camera in real 3D manner (I added Z-axis rotation though):
// handle keyboard input... asynchronously, I guess
if(kbd->GetKeyState(CSKEY_RIGHT)) c->GetTransform().RotateThis(CS_VEC_ROT_RIGHT, speed);
if(kbd->GetKeyState(CSKEY_LEFT)) c->GetTransform().RotateThis(CS_VEC_ROT_LEFT, speed);
if(kbd->GetKeyState(CSKEY_PGUP)) c->GetTransform().RotateThis(CS_VEC_TILT_UP, speed);
if(kbd->GetKeyState(CSKEY_PGDN)) c->GetTransform().RotateThis(CS_VEC_TILT_DOWN, speed);
if(kbd->GetKeyState(CSKEY_DEL)) c->GetTransform().RotateThis(CS_VEC_TILT_LEFT, speed);
if(kbd->GetKeyState(CSKEY_END)) c->GetTransform().RotateThis(CS_VEC_TILT_RIGHT, speed);
if(kbd->GetKeyState(CSKEY_UP)) c->Move(CS_VEC_FORWARD * 4 * speed);
if(kbd->GetKeyState(CSKEY_DOWN)) c->Move(CS_VEC_BACKWARD * 4 * speed);
Now my modified appsimple1.cpp works perfectly, and I can focus on the next steps with Crystal Space.
These original lines were totally useless for my needs, and so I commented them out:
// csMatrix3 rot = csXRotMatrix3 (rotX) * csYRotMatrix3 (rotY) * csZRotMatrix3 (rotZ);
// csTransform ot (rot, c->GetTransform().GetOrigin());
Btw, The Cassini Division is an awesome game - I love the realistic thruster sounds! Beats any commercial space game
