if (m_device != 0 ) { core::vector3df rotation(y,x,0.f); m_camera->setRotation(rotation); f32 viewlength = m_camera->getTarget().getLength(); f32 angle = z*2*Pi/360.0; m_camera->setUpVector(vector3df(viewlength*cos(angle),viewlength*sin(angle),0.0f)); }
具體用法參考上面
還有一個方法旋轉錄影機
是控制另一軸的旋轉
void Scene_3D::slotUSBENGINE(f32 x, f32 y, f32 z)
{
core::vector3df pos = m_camera->getPosition();
core::vector3df target = (m_camera->getTarget() - m_camera->getAbsolutePosition());
core::vector3df relativeRotation = target.getHorizontalAngle();
target.set(0,0, core::max_(1.f, pos.getLength()));
core::vector3df movedir = target;
core::matrix4 mat;
mat.setRotationDegrees(core::vector3df(relativeRotation.X, relativeRotation.Y, 0));
mat.transformVect(target);
movedir = target;
movedir.normalize();
pos += movedir*0.5f*(x/5);
core::vector3df strafevect = target;
strafevect = strafevect.crossProduct(m_camera->getUpVector());
m_camera->setPosition(pos);
target += pos;
m_camera->setTarget(target);
// qDebug()<<"hjsdfjhkgsdfgjhksdfajhgksadfjhklsdfahjklsdfakhjlsakjhlsdfhkjsdfajhklsafkjhlsfajhklsfdahjklfsdahjklfsdahjklsfjkhlsd";
}