问题描述
我再次尝试在 Q3D 中做一些自定义的事情,但遇到了以下问题。 我按照示例中的说明制作了一个自定义几何图形,并且(实际上)从源代码修改了 QTorusMesh 类。
不知何故,我设法绘制了我想要的东西,但对象拾取功能拒绝在我的网格上正常工作。 我注意到,如果我以相反的顺序绘制几何体(我的 srface 的切片将在相反的方向上进行,最后给出倒数),拾取开始工作,但不是在整个表面上,而是在中心区域的某处。 我试过:
我已阅读此主题 https://forum.qt.io/topic/96709/qobjectpicker-qpickingsettings-trianglepicking-doesn-t-work-with-custom-mesh/3 但似乎并非如此。
我很想知道交集机制是如何工作的。代码是巨大的,我最好的猜测是渲染后端来查看。
您能否分享一些您的经验或一些说明?
好的……现在我的逻辑结束了…… 我已经关闭了挑选所有对象,但一个和...
这种采摘方式有效
Qt3DCore::QTransform *transform = new Qt3DCore::QTransform();
transform->setScale(4.0f);// this line
transform->setTranslation(QVector3D(15.0f,-10.0f,0.0f));
Qt3DExtras::QphongMaterial *material = new Qt3DExtras::QphongMaterial();
material->setDiffuse(QColor(QRgb(0x665423)));
m_twoCylinderFilletEntity = new Qt3DCore::QEntity(m_rootEntity);
m_twoCylinderFilletEntity->setobjectName("m_twoCylinderFilletEntity");
{
m_objectPicker = new Qt3DRender::QObjectPicker(m_twoCylinderFilletEntity);
m_objectPickers.push_back(m_objectPicker);
connect(m_objectPicker,&Qt3DRender::QObjectPicker::clicked,this,&SceneModifier::clickedHandler);
}
m_twoCylinderFilletEntity->addComponent(m_twoCylinderFilletMesh);
m_twoCylinderFilletEntity->addComponent(material);
m_twoCylinderFilletEntity->addComponent(transform);
m_twoCylinderFilletEntity->addComponent(m_objectPicker);
这样就不行了
Qt3DCore::QTransform *transform = new Qt3DCore::QTransform();
transform->setScale(1.0f);// this line
transform->setTranslation(QVector3D(15.0f,&SceneModifier::clickedHandler);
}
m_twoCylinderFilletEntity->addComponent(m_twoCylinderFilletMesh);
m_twoCylinderFilletEntity->addComponent(material);
m_twoCylinderFilletEntity->addComponent(transform);
m_twoCylinderFilletEntity->addComponent(m_objectPicker);
我特意复制了整个代码,以表明除了 QTransformation 中的比例之外没有其他任何变化。我只是无法理解缩放可能会如何影响交集计算.... 请有人向我解释这一点,因为我真的不知道开发人员试图实现什么。
我也在认真考虑放弃 Qt Q3D 作为我的项目选择,因为这种意外行为很难调试和维护。 Q3D 似乎非常不成熟,容易出错,而且版本之间不断变化。 在这种情况下,前端/后端架构并没有提供任何特别的优势,而是混淆了源代码并将调试过程拖入试错中。
可能对于一些没有一些高级(但实际上不是那么高级)几何处理的简单项目,Q3D 是可以的。如果是这样,我希望看到完整的文档(而不仅仅是 QML,QML 永远不会是接口开发的唯一手段,在这种情况下,Python 或 Lua 作为脚本和配置机制将是更好的选择)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)