Qt3D中实体QEntity,QComponent,QTransform使用说明

Qt3DCore::QEntity是一个Qt3DCore::QNode子类,可以聚合指定其行为的多个Qt3DCore::QComponent实例。Qt3DCore::QEntity本身就是一个空壳。 Qt3DCore::QEntity对象的行为由其引用的Qt3DCore::QComponent对象定义。 每个Qt3D后端方面将能够通过识别它由哪些组件组成来解释和处理实体。 QEntity一方面可以决定只处理由单个Qt3DCore::QTransform组件组成的实体,另一方面,可以专注于处理Qt3DInput::QMouseHandler鼠标行为。

QComponent作为场景节点的基类,可由Qt3DCore::QEntity实例作为组件聚合。

Qt3DCore::QComponent提供了一个垂直的行为切片,可以分配给Qt3DCore::QEntity实例,有时也可以在Qt3DCore::QEntity实例之间共享。

Qt3DCore::QComponent子类通常聚合在向聚合实体赋予有用行为的组中。 例如,要拥有由Qt3D渲染器方面绘制的实体,实体很可能会聚合Qt3DCore::QTransform,Qt3DRender::QMesh和Qt3DRender::QMaterial组件。

Qt3D中QTransform用于在网格上执行变换,这个组件不能在多个QEntity之间共享。转换被保存为QVector3D缩放,QQuaternion旋转和QVector3D平移组件。 变换按该顺序应用于网格。 当设置了QTransform::matrix属性时,它被分解为这些变换分量并发出相应的信号。

Qt3D中要设置QTransform;可以使用一下函数:

fromAxisAndAngle和fromAxesAndAngles可用于设置围绕特定轴的旋转,fromEulerAngles可用于设置基于欧拉角的旋转,rotateAround可用于围绕特定点相对于局部原点旋转对象。

Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
Qt3DCore::QEntity *sceneEntity = new Qt3DCore::QEntity(rootEntity);
sceneEntity->addComponent(pointMesh);
    sceneEntity->addComponent(pointTransform);
sceneEntity->addComponent(material);
view.setRootEntity(rootEntity);

上面代码中出现了两个QEntity,一个是rootEntity,一个是sceneEntity,实际上就相当于QWidget窗口中的Widget,一个Widget也可以显示在窗口。3D窗口的view设置了rootEnttiy,就相当于设置了Widget,其他组件像mesh类的立体图形,材质,纹理,旋转变换配置,都类似于控件,在rootEntity上布局一样。

只不过一个rootEntity就像一个widget那样,可以布局很多不同的控件,甚至是widget,所以子widget,子Entity同样可以添加其他的子控件,子组件。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1号程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值