C++ 如何使用QML围绕原点缩放QMesh

C++ 如何使用QML围绕原点缩放QMesh,c++,qt,qml,qt3d,C++,Qt,Qml,Qt3d,我正在使用QML显示STL文件。我想对文件进行修改并在场景中显示它(平移、旋转和缩放)我做了前两个,但对于缩放,我想围绕原点缩放(x=0,y=0,z=0)。我怎样才能继续 原始网格 我想做的是: 如果要变换对象,需要使用旋转比例变换顺序(简而言之:RST) 如果要变换坐标系,请使用另一种方法:TSR 秩序真的很重要 如果加载stl文件,并且原点已经是所需的原点,则可以旋转对象、缩放然后平移它。如果原点不是您想要的,则需要将其转换为您想要的“初始位置”。如果您是生成stl文件的人,您可以使用生成该

我正在使用QML显示STL文件。我想对文件进行修改并在场景中显示它(平移、旋转和缩放)我做了前两个,但对于缩放,我想围绕原点缩放(x=0,y=0,z=0)。我怎样才能继续

原始网格 我想做的是:

如果要变换对象,需要使用旋转比例变换顺序(简而言之:RST

如果要变换坐标系,请使用另一种方法:TSR

秩序真的很重要


如果加载stl文件,并且原点已经是所需的原点,则可以旋转对象、缩放然后平移它。如果原点不是您想要的,则需要将其转换为您想要的“初始位置”。如果您是生成stl文件的人,您可以使用生成该stl文件的软件将其置于正确的“开始位置”。

您想用不同于y的比例因子围绕原点(x=0,y=0,z=0)进行缩放吗

您可以按如下方式完成此操作:

Transform {
     ...
    scale3D:  Qt.vector3d(1, 0.5, 1)
}
编辑:如果STL文件的原点与坐标系不同:
在这种情况下,将对象平移到坐标系的原点,进行缩放,然后按照我在第一个答案中的建议将其平移回去。要获得所需的翻译量,您可以查询boundingvolume、minExtent和maxExtent

对不起,我想我没有很好地解释我的问题。我的意思是我想沿着某个点缩放STL网格,而不是沿着面的法线。我会试图找到一个很好的图形来表达我的意思,并尽快回复。我想对这个问题进行完全相同的操作,但是使用Qt,你能显示你已经尝试过的代码吗?我给你的代码示例与你的链接完全相同。你试过了吗?它是一个Spingbox,当它的值改变时,它会进行缩放关于改变的值:{var vec=Qt.vector3d(_value.x/100.0,_value.y/100.0,_value.z/100.0);mainview.selectedEntity.transform.scale3D=vec;`您正在使用一个spinbox?当spinbox的值更改时,您希望stl对象以相同的x、y和z量进行缩放?这就是您的代码所做的。如果您希望以不同的方式缩放它们,您可能需要多个spinbox。实际上,每个spinbox都有3个ng到X、Y、Z当它们的值根据值更改STL对象比例时,问题是我希望在坐标系原点周围而不是STL原点周围进行缩放。