gpt4 book ai didi

c++ - 导入机器人机械臂(6 轴)的连接部件并通过用户输入(C++ 代码)使每个关节旋转

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:02 29 4
gpt4 key购买 nike

我正在尝试在 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);

我的 union 类如下:关节.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;
}

我的 union 头文件:关节.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

最佳答案

如果您的关节具有“父子”层次结构,则您应该将每个父节点指定为 Joint *joint2 = new Joint(joint1);

这样,当您旋转父级时,子级也会旋转。但它不是互惠的(它在 Blender 中起到养育作用):旋转或平移子项不会影响其任何父项。

关于c++ - 导入机器人机械臂(6 轴)的连接部件并通过用户输入(C++ 代码)使每个关节旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986339/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com