Qt QObjectPicker不使用自定义几何体网格和渲染器
我用自定义的QGeometryRenderer和QGeometry设置了一个简单的3d场景。自定义QGeometry是从ply文件加载的Qt QObjectPicker不使用自定义几何体网格和渲染器,qt,qt5,qt3d,Qt,Qt5,Qt3d,我用自定义的QGeometryRenderer和QGeometry设置了一个简单的3d场景。自定义QGeometry是从ply文件加载的 class ColorMeshGeometry : public Qt3DRender::QGeometry { Q_OBJECT public: ColorMeshGeometry(QString meshFile, ColorMeshRenderer *parent); ~ColorMeshGeometry(); void Geometry
class ColorMeshGeometry : public Qt3DRender::QGeometry
{
Q_OBJECT
public:
ColorMeshGeometry(QString meshFile, ColorMeshRenderer *parent);
~ColorMeshGeometry();
void GeometryCenter(QVector3D* center);
};
class ColorMeshRenderer : public Qt3DRender::QGeometryRenderer
{
ColorMeshGeometry* m_geometry;
Q_OBJECT
public:
explicit ColorMeshRenderer(QString meshFile, Qt3DCore::QNode *parent = 0)
{
m_geometry = new ColorMeshGeometry(meshFile, this);
setGeometry(m_geometry);
}
~ColorMeshRenderer();
void ViewCenter(QVector3D* center);
};
下面是设置这一切的代码:
uto view = new Qt3DExtras::Qt3DWindow();
auto container = createWindowContainer(view, this);
auto rootEntity = new Qt3DCore::QEntity();
ColorMeshRenderer* mesh = new ColorMeshRenderer(filename, rootEntity);
view->defaultFrameGraph()->setClearColor(QColor(QRgb(0x111111)));
view->camera()->lens()->setPerspectiveProjection(45.0f, view->width()/view->height(), 0.01f, 100000.0f);
view->camera()->setPosition(QVector3D(0.f, -512.f, 500.0f));
view->camera()->setViewCenter(QVector3D(0, 0, 0));
auto material = new Qt3DExtras::QPerVertexColorMaterial(rootEntity);
auto picker = new Qt3DRender::QObjectPicker(rootEntity);
picker->setHoverEnabled(false);
picker->setDragEnabled(false);
auto plyEntity = new Qt3DCore::QEntity(rootEntity);
plyEntity->addComponent(mesh);
plyEntity->addComponent(material);
plyEntity->addComponent(picker);
connect(picker, &Qt3DRender::QObjectPicker::pressed, this, &ViewerWidget::picker_Clicked);
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(rootEntity);
camController->setCamera(view->camera());
view->setRootEntity(rootEntity);
从未触发QObjectPicker::pressed事件。如果改用qt3detras::QTorusMesh,则会触发pressed事件。QObjectPicker还需要实现什么才能使用自定义网格
编辑:
可以找到完整的示例代码。最终解决方案是透视投影。该项目的后窗格最终被删除,修复方法如下:
view->camera()->lens()->setPerspectiveProjection(45.0f, view->width()/view->height(), 0.01f, 5000.0f);
几何体是否从文件加载到场景中?你能看到它吗?是的,几何体是可见的,并且可以与相机控制器交互。你设置正确吗?我用各种方式测试了拾取设置,但似乎没有任何效果。以防万一,你是否尝试加载另一个文件?其他文件也会这样吗?