Qt:3D水平条形图

问题描述:

我正在尝试使用Qt 3D绘制3D水平条形图。我试图通过绘制具有相同x,y和旋转的连续长方体并将它们转换为不同深度来实现此目的。但它似乎只改变深度不起作用,因为x和y都在变化,我无法弄清楚。Qt:3D水平条形图

更新:

我发现x和y的属性也应由特定值被改变。我硬编码它,它工作正常,但我无法找出一个方程来自动做这个不同的尺寸。

enter image description here

代码:

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

+0

非常感谢,它工作正常。 –