我正在尝试在Qt C++中导入机器人机械臂关节的6个3D网格。将显示关节,但它们不会像连接在一起一样旋转。但每个关节都独立地围绕自己的中心旋转。我想通过c++代码旋转每个关节,其他关节也应该旋转。我正在使用Blender设置网格的中心,并导出到obj文件。
Qt3DCore::QEntity *root = new Qt3DCore::QEntity();
Qt3DExtras::Qt3DWindow view;
Joint *joint1 = new Joint(root);
joint1->mesh()->setSource(QUrl(QStringLiteral("qrc:/assets/base.obj")));
joint1->transform()->setTranslation(QVector3D(0.0f, 1.81f, 0.0f));
joint1->transform()->setScale(0.01f);
Qt3DExtras::QPhongMaterial *material1 = new Qt3DExtras::QPhongMaterial();
material1->setDiffuse(QColor(204, 91, 70));
material1->setSpecular(QColor(255, 171, 247 ));
material1->setShininess(500.0f);
joint1->addComponent(material1);
Joint *joint2 = new Joint(root);
joint2->mesh()->setSource(QUrl(QStringLiteral("qrc:/assets/j2.obj")));
joint2->transform()->setTranslation(QVector3D(0.0f, 1.9030f, 0.0f));
joint2->transform()->setScale(0.01f);
Qt3DExtras::QPhongMaterial *material2 = new Qt3DExtras::QPhongMaterial();
material2->setDiffuse(QColor(27, 176, 204));
material2->setSpecular(QColor(37, 95, 255 ));
material2->setShininess(500.0f);
joint2->addComponent(material2);
/*
* Rest of the 4 joint meshes are defined in same way as above
*/
view.setRootEntity(root);我的联合类如下: joint.cpp
#include "joint.h"
Joint::Joint(Qt3DCore::QNode *parent)
: Qt3DCore::QEntity(parent)
,m_mesh(new Qt3DRender::QMesh())
,m_transform(new Qt3DCore::QTransform())
{
addComponent(m_mesh);
addComponent(m_transform);
}
Joint::~Joint()
{
}
Qt3DRender::QMesh *Joint::mesh() const
{
return m_mesh;
}
Qt3DCore::QTransform *Joint::transform() const
{
return m_transform;
}我的联合头文件: joint.h
#ifndef JOINT_H
#define JOINT_H
#include <Qt3DCore/QEntity>
#include <Qt3DCore/QTransform>
#include <Qt3DRender/QMesh>
class Joint : public Qt3DCore::QEntity
{
public:
Joint(Qt3DCore::QNode *parent= 0);
~Joint();
Qt3DRender::QMesh *mesh() const;
Qt3DCore::QTransform *transform() const;
private:
Qt3DRender::QMesh *m_mesh;
Qt3DCore::QTransform *m_transform;
};
#endif //JOINT_H发布于 2018-06-22 19:43:06
如果关节具有“父-子”层次,则应将每个父关节指定为Joint *joint2 = new Joint(joint1);。
这样,当您旋转父对象时,子对象也将旋转。但它不是相互的(它在Blender中作为父对象工作):旋转或平移子对象不会影响它的任何父对象。
https://stackoverflow.com/questions/50986339
复制相似问题