【发布时间】:2021-04-26 09:31:52
【问题描述】:
我有一个使用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 绘制三个球体(白色),但我试图让它们有资格被挑选。我也有旋转、移动和放大的能力。所以这些功能在完成后不应该破坏挑选。(正如评论中所问的,这不是家庭作业。这是我过去两年工作的一个副项目。所以这个问题只是很小的一部分我的代码。)
【问题讨论】:
-
这是一个练习/家庭作业吗?如果是这样,也许告诉你的老师/助教/教授,选择模式从来没有得到特别好的支持,已经完全从现代 OpenGL 中删除,使用它会退回到软件后备实现,因为没有GPU 以那种的方式工作。如果您想以正确的方式进行 OpenGL,请渲染到索引缓冲区(不要与索引颜色模式混淆)或使用剪裁遮挡查询。
-
这不是作业。我正在将此作为满足我需求的副项目。 Spheres 只是这里的例子,但我想要做的事情比这要大得多。你介意指出一些正确方法的例子吗?我可以很容易地把注意力转移到那个地方。
标签: python opengl pyqt5 pyopengl