Qt:3D水平条形图
Qt: 3D Horizontal Bar Chart
我正在尝试使用 Qt 3D 绘制 3D 水平条形图。我试图通过绘制具有相同 x 、 y 和旋转的连续长方体并将它们转换为不同的 depths.But 来实现这一点似乎只改变深度是行不通的,因为 x 和 y 也在改变,我想不通。
更新:
我发现 x 和 y 属性也应该由特定值更改。我对它进行了硬编码,它工作正常,但我想不出一个等式来自动执行不同尺寸的操作。
代码:
SceneModifier::SceneModifier(Qt3DCore::QEntity *rootEntity)
: m_rootEntity(rootEntity)
{
// Green cuboid
//Cuboid shape data
cuboid = new Qt3DExtras::QCuboidMesh();
cuboid->setXExtent(8);
cuboid->setYExtent(2);
cuboid->setZExtent(4);
// CuboidMesh Transform
Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform();
cuboidTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.1f, -0.1f, 0.0f), 45.0f));
Qt3DExtras::QPhongMaterial *cuboidMaterial = new Qt3DExtras::QPhongMaterial();
cuboidMaterial->setDiffuse(QColor(QRgb(0x66423)));
cuboidMaterial->setAmbient(QColor(QRgb(0x35423)));
//Cuboid
m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity->addComponent(cuboid);
m_cuboidEntity->addComponent(cuboidMaterial);
m_cuboidEntity->addComponent(cuboidTransform);
// Red Cuboid shape data
cuboid2 = new Qt3DExtras::QCuboidMesh();
cuboid2->setXExtent(8);
cuboid2->setYExtent(2);
cuboid2->setZExtent(2);
// CuboidMesh Transform
cuboidTransform2 = new Qt3DCore::QTransform();
cuboidTransform2->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.1f, -0.1f, 0.0f), 45.0f));
/*An equation is needed to calculate the translation values*/
cuboidTransform2->setTranslation(QVector3D(6*qAsin(45.0/180), 6*qAsin(45.0/180),-2.1f));
Qt3DExtras::QPhongMaterial *cuboidMaterial2 = new Qt3DExtras::QPhongMaterial();
cuboidMaterial2->setDiffuse(QColor(QRgb(0xff0000)));
//Cuboid
m_cuboidEntity2 = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity2->addComponent(cuboid2);
m_cuboidEntity2->addComponent(cuboidMaterial2);
m_cuboidEntity2->addComponent(cuboidTransform2);
}
我认为您遇到的问题是翻译发生在 旋转之后。可能您想要的不是在每个长方体上单独设置变换,而是在它们的父级上设置变换。所以不要旋转任何一个长方体;只需正常翻译它们,就像您直接从上方查看一样。但是然后将旋转变换添加到 m_rootEntity
.
我正在尝试使用 Qt 3D 绘制 3D 水平条形图。我试图通过绘制具有相同 x 、 y 和旋转的连续长方体并将它们转换为不同的 depths.But 来实现这一点似乎只改变深度是行不通的,因为 x 和 y 也在改变,我想不通。
更新:
我发现 x 和 y 属性也应该由特定值更改。我对它进行了硬编码,它工作正常,但我想不出一个等式来自动执行不同尺寸的操作。
代码:
SceneModifier::SceneModifier(Qt3DCore::QEntity *rootEntity)
: m_rootEntity(rootEntity)
{
// Green cuboid
//Cuboid shape data
cuboid = new Qt3DExtras::QCuboidMesh();
cuboid->setXExtent(8);
cuboid->setYExtent(2);
cuboid->setZExtent(4);
// CuboidMesh Transform
Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform();
cuboidTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.1f, -0.1f, 0.0f), 45.0f));
Qt3DExtras::QPhongMaterial *cuboidMaterial = new Qt3DExtras::QPhongMaterial();
cuboidMaterial->setDiffuse(QColor(QRgb(0x66423)));
cuboidMaterial->setAmbient(QColor(QRgb(0x35423)));
//Cuboid
m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity->addComponent(cuboid);
m_cuboidEntity->addComponent(cuboidMaterial);
m_cuboidEntity->addComponent(cuboidTransform);
// Red Cuboid shape data
cuboid2 = new Qt3DExtras::QCuboidMesh();
cuboid2->setXExtent(8);
cuboid2->setYExtent(2);
cuboid2->setZExtent(2);
// CuboidMesh Transform
cuboidTransform2 = new Qt3DCore::QTransform();
cuboidTransform2->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.1f, -0.1f, 0.0f), 45.0f));
/*An equation is needed to calculate the translation values*/
cuboidTransform2->setTranslation(QVector3D(6*qAsin(45.0/180), 6*qAsin(45.0/180),-2.1f));
Qt3DExtras::QPhongMaterial *cuboidMaterial2 = new Qt3DExtras::QPhongMaterial();
cuboidMaterial2->setDiffuse(QColor(QRgb(0xff0000)));
//Cuboid
m_cuboidEntity2 = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity2->addComponent(cuboid2);
m_cuboidEntity2->addComponent(cuboidMaterial2);
m_cuboidEntity2->addComponent(cuboidTransform2);
}
我认为您遇到的问题是翻译发生在 旋转之后。可能您想要的不是在每个长方体上单独设置变换,而是在它们的父级上设置变换。所以不要旋转任何一个长方体;只需正常翻译它们,就像您直接从上方查看一样。但是然后将旋转变换添加到 m_rootEntity
.