Klingt ein wenig so, als würdest Du Rotation und Translation vertauschen. Ich weiß zwar nicht genau, wie das in Irrlicht geregelt ist, aber es gibt einen Unterschied zwischen
"Erst verschieben, dann drehen"
und
"Erst drehen, dann verschieben".
Das liegt daran, dass im ersten Fall der Punkt, um den Du drehst, nicht mehr im Ursprung des Objektes (bzw. der Kamera) liegt. Also im Zweifel mal
Code:
scene::ISceneNode* cam_lookat[MAX_CAMS];
void RotateCamera(int nr, scene::ICameraSceneNode* cam, float pitch, float yaw, scene::ISceneNode* parent) {
core::vector3df parentpos(0, 0, 0);
if (parent)
parentpos = parent->getPosition();
if (!cam_lookat[nr])
cam_lookat[nr] = smgr->addCubeSceneNode(0);
if (cam_lookat[nr]) {
cam_lookat[nr]->setRotation(core::vector3df(pitch, yaw, 0));
cam_lookat[nr]->setPosition(cam->getPosition()+parentpos);
MoveSceneNode(cam_lookat[nr], core::vector3df(0, 0, 10));
cam->setTarget(cam_lookat[nr]->getPosition());
}
}
probieren.