gpt4 book ai didi

c++ - 获取网格中心的屏幕位置

转载 作者:行者123 更新时间:2023-12-01 14:29:28 25 4
gpt4 key购买 nike

我的目标是创建一个直观的 3D 操纵器来处理我的 3D 编辑器中显示的网格旋转,使用 Qt/QML 制作。

为此,当用户单击实体时,会在网格周围生成 3 个环面,代表用户可以操作的欧拉角。如果用户然后单击一个环面,我希望他能够通过拖动鼠标来旋转网格。用户似乎这样做的自然方式是在他们希望网格旋转的方向上围绕圆环拖动鼠标。

因此,我需要一种方法来了解用户如何旋转鼠标。我想到了一个方法:当用户点击圆环时,我检索圆环中心的位置。然后,我将这个世界位置转换为它的屏幕位置。然后,我监视鼠标光标与圆环中心之间的角度。这个角度的演变应该告诉我我需要的一切:如果角度顺时针增加,网格应该顺时针旋转,反之亦然。这个解决方案应该为我的应用程序产生足够好的结果,因为它不会依赖于相机的角度,或者只是非常小。

但是,我找不到使用 Qt 将世界位置转换为其屏幕位置的方法。我找到了函数 QVector3D::project(const QMatrix4x4 &modelView, const QMatrix4x4 &projection, const QRect &viewport) ,但它的文档非常稀缺,我找不到任何人使用它...我可能已经找到了为 projection 提供的内容参数(来自 QCamera 的 projectionMatrix 属性,这里是 https://doc.qt.io/qt-5/qml-qt3d-render-camera.html ),但就是这样。什么是modelView ?和 viewport ?是不是很简单QRect(0, 0, 1920, 1080) ?

如果有人有任何线索,那就太棒了,我在任何地方都找不到任何东西,我现在有点失去希望。或者也许是我的问题的另一个更简单的解决方案?请注意,用户还可以在网格周围自由移动相机,这会增加复杂性。

非常感谢您的时间,祝您有美好的一天!

最佳答案

是的,您应该能够使用上述功能从世界位置转换到屏幕位置。您对 projection 的看法是正确的争论。至于modelView参数,你应该使用 viewMatrix来自 QCamera 的属性,官方文档中没有,但它对我有用。 viewport参数表示您正在投影的屏幕部分的尺寸。您可以使用 QRect(0, 0, 1920, 1080)如果你使用全屏全高清投影,否则使用类似 QRect(QPoint(0, 0), view->size()) 的东西,其中 view是带有 3D 图像的 wigdet 或窗口。请注意,生成的屏幕位置将具有 y = 0向下和正值在上面,这与通常的屏幕坐标相反。

关于c++ - 获取网格中心的屏幕位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59683854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com