python - 从 OpenGL 窗口、速度、选项等中挑选?
问题描述
我的 PyOpenGL 窗口中有大约 600 个球体。我正在使用 PyQt 来管理我的窗口,所以我使用QGLWidget
它。我想从这些球体中挑选,但问题是它们都是相同颜色的金属灰色。所以我没有使用任何图像纹理。
在这一点上,我做了一些研究,发现这个使用 C 例程的教程,由于我不熟悉它,这对我来说很有挑战性。
https://www.lighthouse3d.com/tutorials/opengl-selection-tutorial/
我还想提一下,我一直在使用核心配置文件,而不是像下面的链接中那样的立即模式。
仍然可以使用核心配置文件进行挑选,因为它非常基本吗?还是我需要将PyOpenGL
代码切换到立即模式?
解决方案
我以前没有使用过 QGLWidget,但是通过查看您提供的一些内容和文档,您可能想要:
- 确保在 gl 小部件对象上启用了鼠标跟踪。
- 确保您有一个函数连接到 gl 小部件的paintEvent 函数
- 获取鼠标位置
- 使用场景中的所有对象创建一个 QVector。
- 创建一个 QVectorIterator 来遍历场景中的所有对象。
- 将每个 3d 对象位置转换投射/转换到屏幕空间,然后计算增量添加到一个集合(甚至可能是一个带有 {delta: qglobject} 的字典)。跟踪最低增量
- 使用 my_objects[lowest_delta] 选择对象,然后执行您的操作。
我以前从未使用过它,因此可能有一些类和方法可以为您完成大部分工作,请研究一下。如果您要在屏幕上显示大量对象,则可能需要某种缓存/记忆来提高性能。可能有帮助的一件事是从 gl_widget 原点/中心的每个对象的排序增量创建一个字典,然后使用二进制搜索来查找最接近鼠标位置的对象。
检查其中一些:
推荐阅读
- arrays - 将 for 循环转换为大写
- javascript - Blazor 从 URL 下载 Azure Blob
- c# - ASP.NET 核心项目启动时的 Serilog Blackholing 日志
- python - 在 Seaborn 的 FacetGrid 中如何将 x 轴的比例调整为可用数据的范围
- r - 将相同连接应用于 20 列(具有唯一输出变量)的最佳方法?
- sql - ORACLE 获取第一条记录
- python - 密码学python包中的Fernet解密错误
- reactjs - 将数据从 Firebase 实时数据库加载到 React 钩子组件
- java - 将类打包在 jar 中时 Spring-boot @ComponentScan 不起作用,未打包类时工作正常
- swift - 在没有 FileManager 的情况下将 UIDocument 保存到新 URL 时如何防止文件名冲突