设置实体旋转的原点(Qt 3D)
Posted
技术标签:
【中文标题】设置实体旋转的原点(Qt 3D)【英文标题】:Set origin point for Entity rotation (Qt 3D) 【发布时间】:2020-07-22 10:17:29 【问题描述】:我有一个简单的 3D 场景和一个要围绕其原点旋转的框:
Entity
components: [ mesh, phongMaterial, transform ]
CuboidMesh
id: mesh
yzMeshResolution: Qt.size(2, 2)
xzMeshResolution: Qt.size(2, 2)
xyMeshResolution: Qt.size(2, 2)
zExtent: 1
xExtent: 1
yExtent: 2
PhongAlphaMaterial
id: phongMaterial
property color randColor: Qt.rgba(Math.random(), Math.random(), Math.random(), 1)
ambient: randColor
diffuse: randColor
specular: randColor
shininess: 1.0
alpha: 0.4
Transform
id: transform
property real userAngle: 0.0
scale: 1
rotation: fromAxisAndAngle(Qt.vector3d(0, 0, 1), userAngle)
translation: Qt.vector3d( 0.0, 0.0, 0.0 )
QQ2.NumberAnimation
target: transform
property: "userAngle"
duration: 2000
loops: QQ2.Animation.Infinite
running: true
easing.type: QQ2.Easing.InOutQuad
from: 0
to: 360
默认情况下,原点位于框的中心。如图所示,我需要将原点向下移动:
但我不知道该怎么做。我试过玩Transform.translation
,但这只是沿着轴移动形状。我试过玩Transform.rotateAround(point, real angle, vector3d axis),但我没有看到任何变化。我更改了 point
值,但原点仍位于形状的中心。
Transform
id: transform
property real userAngle: 0.0
matrix: rotateAround(Qt.point(1,1), userAngle, Qt.vector3d( 0.0, 0.0, 1.0 ))
【问题讨论】:
【参考方案1】:好的,我找到了解决方案。 rotateAround
的第一个参数是 3d 向量,而不是点。所以使用
matrix: rotateAround(Qt.vector3d(0.0, 1.0, 0.0), userAngle, Qt.vector3d( 0.0, 0.0, 1.0 ))
成功了。
【讨论】:
以上是关于设置实体旋转的原点(Qt 3D)的主要内容,如果未能解决你的问题,请参考以下文章