在Qt3D中,要围绕一个对象旋转摄像机,你可以使用QOrbitCameraController
#include <QGuiApplication>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QOrbitCameraController>
#include <Qt3DCore/QEntity>
#include <Qt3DRender/QMesh>
#include <Qt3DExtras/QSphereMesh>
#include <Qt3DExtras/QPhongMaterial>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
// 创建一个Qt3D窗口
Qt3DWindow view;
// 创建一个根实体
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
// 创建一个球体实体
Qt3DCore::QEntity *sphereEntity = new Qt3DCore::QEntity(rootEntity);
// 创建一个球体网格
Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh();
sphereMesh->setRadius(1);
sphereMesh->setRings(100);
sphereMesh->setSlices(20);
// 创建一个材质
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial();
material->setDiffuse(QColor(QRgb(0xbeb32b)));
// 将网格和材质添加到球体实体
sphereEntity->addComponent(sphereMesh);
sphereEntity->addComponent(material);
// 创建一个轨道摄像机控制器
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(rootEntity);
// 设置摄像机的位置
camController->setCameraPosition(QVector3D(0, 0, 40.0f));
camController->setLookSpeed(100.0f);
camController->setZoomSpeed(10.0f);
// 将根实体添加到场景中
view.setRootEntity(rootEntity);
// 显示窗口
view.show();
return app.exec();
}
在这个示例中,我们创建了一个Qt3D窗口、一个根实体、一个球体实体(包括网格和材质)以及一个轨道摄像机控制器。我们将球体实体添加到根实体,并将轨道摄像机控制器添加到根实体。我们还设置了摄像机的位置以及摄像机的移动速度。
当你运行这个程序时,你将看到一个窗口,其中包含一个球体。你可以通过鼠标拖动来旋转摄像机,通过鼠标滚轮来缩放摄像机,以及通过键盘上的方向键来平移摄像机。这样,你就可以围绕球体旋转摄像机了。
领取专属 10元无门槛券
手把手带您无忧上云