Qt: 3D горизонтальная гистограмма

Я пытаюсь нарисовать трехмерную горизонтальную гистограмму, используя Qt 3D.Я пытаюсь добиться этого, рисуя последовательные кубоиды, имеющие одинаковые x, y и вращение, и перемещая их на разные глубины. Но казалось, что изменение только глубины не работает, так как 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);
}

2

Решение

Я думаю, что проблема у вас в том, что перевод происходит после вращение. Вероятно, вам нужно вместо того, чтобы устанавливать преобразование для каждого кубоида отдельно, вы устанавливаете преобразование для их родителя. Так что не вращайте ни кубоид; просто переведите их, как если бы вы смотрели прямо сверху. Но затем добавьте преобразование вращения в m_rootEntity,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector