在 3D 空间中的 QT 中围绕其 Y 轴旋转小部件
Rotate widget around its Y axis In QT in 3d space
我想在 QT 中围绕其 Y 轴(或任何轴)旋转小部件,方式与此处显示的方式完全相同:
图像在 3D 空间中围绕 Y 轴旋转
我已经搜索过,但我得到的所有 2d 转换,例如顺时针或逆时针旋转
我真的想要一些非常简单的东西,因为我会在整个项目中做一次。
首先,由于绘画引擎的运行方式(完全是2D的)以及布局管理器的工作方式,普通的Qt小部件无法做到这一点,因此任何解决方案都不是平凡的。
最简单的方法是将小部件作为QGraphicsProxyWidget
放入QGraphicsScene/View
中,并使用setTransform(const QTransform&, bool)
方法应用变换矩阵。
但是,由于引擎仍然是 2D,因此您必须创建一个描述所需操作的 3D 转换矩阵,然后使用投影转换为 2D 矩阵。 这并不简单,但你可以"伪造"效果,就像你通过使用静态方法squareToQuad(const QPolygonF&, QTransform&)
链接到的效果一样 - 当用户"旋转"小部件时,一个垂直边缘变小并移向四中心,而相反的边缘变得更大并向四中心移动。
最容易制作和理解的可能是,将小部件绘制成QPixmap。然后子类QWidget wo绘制这个QPixmap转换以匹配3D旋转,或"假"旋转。由于这幅画整齐地位于自定义小部件的单个paintEvent()中,因此很容易从假版本(例如,没有透视)开始,然后在有时间和需要的情况下返回并对其进行改进。
例如,使用OpenGL进行绘画非常容易,例如基于Qt的openGL示例中的"纹理"示例。
如果你真的想在Qt项目中以一种与其他用户界面小部件很好地集成的方式完成这项工作,我建议你看看Qt Quick(Qt 4.7 +)或Qt Quick 2.0(Qt 5.0 +)。它们经过精心设计,有助于创建更多的界面。他们使用QML(描述widget功能的类似css的标记语言)以及熟悉的更高级别的C++包装器,可以像任何其他Qt小部件一样访问。Qt Quick 2.0特别酷,能够相对轻松地绘制出很酷的粒子系统效果。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 与互斥锁相比,旋转锁可以保证上下文切换
- 使用递归的数组的最小值.这是怎么回事
- 为什么在浮点中从大到小会引入更多的误差
- rotatesprite旋转太小了~66525倍
- 从盒子计算 AABB(中心、半大小、旋转)
- C++ 创建小部件数组
- C++/QT 值创建旋转框小部件时更改(整数)信号
- 如何在以任意角度旋转后,在 X 轴上找到多边形的最小可能投影
- 旋转中的小误差导致模型变形
- 小四元数相机bug?(在Z轴上轻微旋转)
- 将旋转矩形分割成更小的矩形,如何旋转它们以保持原始的大矩形
- 在旋转数组中找到最小值
- 如何在FLUID gui编辑器中旋转小部件
- 旋转后字典中最小的字符串
- 在 3D 空间中的 QT 中围绕其 Y 轴旋转小部件