我正在使用Qt Creator和QtQuick开发一个应用程序。该应用程序的目的是通过手指的帮助在三维空间内旋转一个立方体。
我成功地实现了与手指移动相关的操作,但是在立方体与手指之间的旋转上完全卡住了。
我尝试创建一个方向向量,根据当前点和前一个点以及法线向量来确定它。我对立方体进行了沿x和y轴的欧拉旋转,但是到某个点后,立方体旋转不如预期。
这是我的主页QML代码:main.qml
我成功地实现了与手指移动相关的操作,但是在立方体与手指之间的旋转上完全卡住了。
我尝试创建一个方向向量,根据当前点和前一个点以及法线向量来确定它。我对立方体进行了沿x和y轴的欧拉旋转,但是到某个点后,立方体旋转不如预期。
这是我的主页QML代码:main.qml
import QtQuick 2.15
import QtQuick.Window 2.14
import QtQuick3D 1.15
import Qt3D.Input 2.0
import QtQuick.Controls 2.1
import Qt3D.Extras 2.15
Window {
visible: true
width: 640
height: 480
title: qsTr("MouseArea Demo")
MouseArea{
property int previousX: -1
property int previousY: -1
anchors.fill : parent
onPressed: {
previousX = mouseX;
previousY = mouseY;
}
onPositionChanged: {
let direction = Qt.vector2d(mouseX - previousX, mouseY - previousY).normalized();
let normal = Qt.vector2d(direction.y, direction.x).normalized();
console.log("direction : " + direction);
console.log("normal : " + normal);
cube.eulerRotation.x += normal.x * 3;
cube.eulerRotation.y += normal.y * 3;
previousX = mouseX;
previousY = mouseY
}
onReleased: {
previousX = -1;
previousY = -1;
}
}
View3D {
id: view
anchors.fill: parent
camera: camera
renderMode: View3D.Overlay
PerspectiveCamera {
id: camera
position: Qt.vector3d(0, 200, 300)
eulerRotation.x: -30
}
DirectionalLight {
eulerRotation.x: -30
}
Model {
id: cube
visible: true
position: Qt.vector3d(0, 0, 0)
source: "#Cube"
materials: [ DefaultMaterial {
diffuseMap: Texture {
id: texture
source: "../build-colorpicker2d-Desktop_Qt_5_15_2_GCC_64bit-Debug/res.png"
}
}
]
}
}
}
这里有一个关于我两天前跟你提到的y轴旋转问题的视频。
此致敬礼。
rotation
和position
放置形状,即使用偏移量放置形状。 - folibiscube.eulerRotation
进行旋转。问题在于,经过几次点击后,立方体可能会颠倒,这意味着 Y 轴将被反转。而且,拖动鼠标上下会对立方体产生完全相反的效果,这是一个不容易用 QtQuick3D 解决的问题,因此我赞同 Parisa 的答案。 - karlphillip