首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入机械臂(6轴)的连接零件并通过用户输入(C++代码)使每个关节旋转

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

Stack Overflow用户
提问于 2018-06-22 18:52:58
回答 1查看 173关注 0票数 1

我正在尝试在Qt C++中导入机器人机械臂关节的6个3D网格。将显示关节,但它们不会像连接在一起一样旋转。但每个关节都独立地围绕自己的中心旋转。我想通过c++代码旋转每个关节,其他关节也应该旋转。我正在使用Blender设置网格的中心,并导出到obj文件。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
 #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

代码语言:javascript
运行
复制
#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
EN

回答 1

Stack Overflow用户

发布于 2018-06-22 19:43:06

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

这样,当您旋转父对象时,子对象也将旋转。但它不是相互的(它在Blender中作为父对象工作):旋转或平移子对象不会影响它的任何父对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50986339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档