围绕其Y轴旋转小部件在3d空间中的QT中

时间:2013-01-27 08:08:05

标签: c++ qt 3d image-rotation

我想在QT中围绕其Y轴(或任何轴)旋转小部件,与在此处显示的方式完全相同:

Image rotation in 3D space around Y axis

我已经搜索了所有我得到的2d变换,如顺时针或逆时针旋转

我真的想要一些非常简单的东西,因为我会在整个项目中做一次。

3 个答案:

答案 0 :(得分:1)

首先,正常的Qt小部件无法做到这一点,因为绘图引擎的运行方式(它完全是2D),以及布局管理器的工作方式,所以任何解决方案都是非平凡的。

最简单的方法是将小部件放入QGraphicsScene/View作为QGraphicsProxyWidget,并使用setTransform(const QTransform&, bool)方法应用转换矩阵。

然而,由于引擎仍然是2D,您必须创建描述所需操作的3D变换矩阵,然后使用投影转换为2D矩阵。这并不简单,但你可以通过使用静态方法squareToQuad(const QPolygonF&, QTransform&)来“伪造”你所链接的效果 - 当用户'旋转'小部件时,一个垂直边缘变小并朝四边形中心移动,同时相对的边缘变得更大,并向四边形中心移动。

答案 1 :(得分:0)

最容易制作和理解的可能是,paint the widget to a QPixmap。然后子类QWidget wo将此QPixmap转换为匹配3D旋转或“假”旋转。由于这幅画整齐地放在你的自定义小部件中的单个paintEvent()中,因此很容易从假版本开始(比如没有透视),然后回到它并在有时间和需要的情况下改进它。

例如,使用OpenGL进行绘画非常容易,例如基于"Textures"中的openGL examples of Qt示例。

答案 2 :(得分:0)

如果您真的想在Qt项目中以与其他用户界面小部件很好地集成的方式完成此任务,我建议您查看Qt Quick(Qt 4.7 +)或Q​​t Quick 2.0(Qt 5.0 +)。它们旨在帮助促进创建更多的动态界面。他们使用QML(描述小部件功能的类似css的标记语言)与熟悉的更高级别的C ++包装器相结合,可以像任何其他Qt小部件一样进行访问。 Qt Quick 2.0特别酷,能够相对轻松地绘制出酷炫的粒子系统效果。