2016-06-13 9 views
2

Ich versuche, ein 3D horizontales Balkendiagramm unter Verwendung Qt 3D zu zeichnen. Ich versuche, dies zu erreichen, indem ich fortlaufende Quader mit der gleichen x, y und Rotation zeichne und sie in verschiedene Tiefen verschiebe. Aber es schien dass das Ändern der Tiefe nur nicht funktioniert, da sich sowohl x als auch y ändern und ich es nicht herausfinden kann.Qt: 3D horizontales Balkendiagramm

Update:

Ich fand heraus, dass die x- und y-Attribute auch durch spezifische Werte geändert werden sollen. Ich habe es hart codiert und es funktioniert gut, aber ich kann eine Gleichung nicht finden, um diese automatische mit unterschiedlichen Dimensionen zu tun.

enter image description here

Der Code:

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); 
} 

Antwort

0

Ich denke, das Problem, das Sie haben, ist, dass die Übersetzung nach die Rotation geschieht. Wahrscheinlich ist es das, was Sie wollen, anstatt die Transformation auf jeden Quader einzeln zu setzen, legen Sie die Transformation auf ihren Eltern fest. Also nicht einen der beiden Würfel drehen; übersetze sie einfach so, als ob du direkt von oben kommst. Fügen Sie dann eine Rotationstransformation zu m_rootEntity hinzu.

+0

Vielen Dank, es hat gut funktioniert. –

Verwandte Themen