You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt6.2.4中QObjectPicker搭配QCuboidMesh出现异常拾取问题

Qt6.2.4中QObjectPicker拾取位置偏移问题原因分析

在Qt6.2.4版本中使用QObjectPicker时,会出现拾取到鼠标点击位置附近实体的异常情况。可通过修改Qt3D基础形状示例复现该问题:点击截图中的红点位置时,实际拾取到的却是名为“Cuboid 1”的立方体。

相关代码

// Cuboid shape data
//   ... 
Qt3DRender::QObjectPicker *cubePicker = new Qt3DRender::QObjectPicker(cuboid);
connect(cubePicker, &Qt3DRender::QObjectPicker::pressed, this, [] (Qt3DRender::QPickEvent *pick) {
     qDebug() << "pick = " << pick->worldIntersection() << ", " << pick->entity()->objectName();
});

//Cuboid
{
     // ...
     m_cuboidEntity->addComponent(cubePicker);
     m_cuboidEntity->setObjectName("Cuboid 1");
}

输出信息

pick =  QVector3D(4.56187, -0.592511, 0.443995) ,  "Cuboid 1"

问题截图

问题截图

异常原因分析

这个异常的核心原因是Qt6.2.4版本中QObjectPicker的拾取机制存在精度缺陷,具体包括:

  • QObjectPicker默认启用了拾取容差(pick tolerance),当鼠标点击位置与实体的空间距离在容差范围内时,会被判定为命中该实体。如果场景中实体分布较密集,这种容差就容易导致误拾取临近实体。
  • 该版本中Qt3D的像素坐标到世界坐标的转换逻辑存在微小偏差,导致拾取射线没有精确对准鼠标点击的像素位置,进一步放大了容差带来的误拾取概率。

验证与解决方向

  • 尝试调用cubePicker->setPickTolerance(0.0f),将拾取容差设置为0,观察是否能精准拾取点击位置的实体。
  • 检查相机的投影矩阵、视口设置,确保像素坐标到世界坐标的转换精度符合预期。

内容的提问来源于stack exchange,提问作者e.n.shirokov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:05:19