python - PyOpenGL 或 OpenGL 挑选问题(不是颜色挑选)
问题描述
PyOpenGL
我有一个使用库绘制球体的小型 python 程序。该代码具有以下过程
绘制球体
如果有命中,则使用以下
SELECT_BUFFER_SIZE = 512 x, y = event.x(), event.y() # required to call this to force PyQt to read from the correct, updated buffer viewport = glGetIntegerv(GL_VIEWPORT) # print viewport w = viewport[2] - viewport[0] h = viewport[3] - viewport[1] aspect_ratio = w / h glSelectBuffer(SELECT_BUFFER_SIZE) glRenderMode(GL_SELECT) glInitNames() glPushName(0) glMatrixMode(GL_PROJECTION) glPushMatrix() glLoadIdentity() gluPickMatrix(x, viewport[3] - y, 5, 5, viewport) glOrtho( *** setting the schene***) **-draw spheres using glLoadName(for each)** glMatrixMode(GL_PROJECTION) glPopMatrix() glFlush() buffer = glRenderMode(GL_RENDER) # print buffer for hit_record in buffer: _, _, names = hit_record print(names)
但是当我尝试打印名称时,虽然我在窗口上只点击了其中一个,但两个名称都被打印了。应该是什么解决方案
简而言之,我试图在 Pyqt5 窗口中使用具有相同颜色的 PyOpenGL 绘制三个球体(白色),但我试图让它们有资格被挑选。我也有旋转、移动和放大的能力。所以这些功能在完成后不应该中断挑选。(正如评论中所问的,这不是家庭作业。这是我过去两年工作的一个副项目。所以这个问题只是很小的一部分我的代码。)
解决方案
我不太确定这是否会有所帮助
,我承认我没有阅读实际代码,
并且我不太了解球体是否在它们之间或与边界本身发生碰撞
我曾经有一个类似的问题,我无法理解太多时间。
但基本上一次命中被打印了两次,因为两个对象都记录了一次命中,
所以每当它们互相击中时,就会打印两条命中消息。
我使用了他们的 ID(或放在列表中或类似的地方)
,所以只有其中一个(ID 较大的那个)会打印消息
我不知道这是否有帮助,但可能就是这样。
推荐阅读
- python - 从 Alphavantage api 读取数据时,我无法访问日期列
- python - 为什么我得到 peewee.OperationalError
- php - 如何在页面中并排对齐列表数据
- java - 初始化一个只有行数的二维数组
- python - 如果键在“值”中,则将值映射到列
- html - 在引导程序中切换字段集组件
- apache-spark - 运行原始查询与 spark sql 查询有什么区别?
- python-3.x - SQLAlchemy 核心。值方法不限制插入语句中的列
- html - 即使margin和padding值为0,父元素和子元素之间也存在一些差距
- python - python3配置脚本错误-找不到pthreads