问题标签 [pyopengl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4468 浏览

opengl - OpenGL内存不足错误,FBO大

在 PyOpenGL/PyQt 中创建大型 (2^13) 帧缓冲区对象时出现内存不足错误:

给出:

但是,如果我降级到 2^12 纹理或 FBO,这会很好。

在我看来,两个大约132mb 268mb(4 字节*8192^2)的图像(FBO+纹理)应该填满我的 1gb 视频内存,这似乎是不合理的。我错过了什么?

0 投票
2 回答
566 浏览

python - 在 Linux 上将 bbfreeze 与 pyopengl 应用程序一起使用

我有这个 pyopengl 应用程序,我正在尝试用 bbfreeze 冻结它。不幸的是,当我运行冻结的应用程序时,它会出现以下错误:

这是必需的版本信息:

我试图在我冻结它的同一台机器上运行它,并且未冻结的应用程序在该机器上运行良好。

有没有人设法完成这项工作?或者也许提供一些调试指导?

0 投票
2 回答
4612 浏览

python - PyOpenGL:渲染......嗯......真的

一段时间以来,我一直在使用 python 和 OpenGL 开发一个项目。我之前发布了一个类似的问题,但后来我做了更多的研究并切换到了非弃用的功能。按照本教程(显然将其转换为 Python 版本)我最终得到了以下代码:

Shaders/Mainv.glsl 和 Shaders/Mainf.glsl 包含:

和:

分别。

这段代码为我提供了一个(清晰的颜色)GLUT 窗口,这似乎表明它由于某种原因没有渲染我的三角形,但我不知道为什么会这样,而且我真的找不到任何 PyOpenGL 的例子'不要使用不推荐使用的功能,所以我看不出他们是否做了与我不同的事情,我错过了。

0 投票
1 回答
604 浏览

webgl - WebGL 与 PyOpenGL

我现在被分配尝试将在 WebGl 中完成的一些 3d 渲染集成到 PyOpenGL。我有一些两者的样本,但从一开始我就陷入了困境。对于具有大量顶点的对象之一,WebGL 版本比 PyOpenGL 版本运行得更好。我很好奇这是正常的还是某些实现问题。

问候,波格丹

0 投票
1 回答
2874 浏览

wxpython - 将 wxGLCanvas 添加到 wxPanel 问题

我正在尝试将 OpenGL 集成到一个简单的 wx 应用程序中。所以我四处搜索并找到了一个扩展 wxGLCanvas 并绘制一个可以工作的球体的类的工作示例。然而,这被添加到主框架中:

但是我想在侧面有一些按钮和菜单,所以我尝试添加画布,但到目前为止没有成功。我的方法是:

所以标签和面板会显示,但画布不会。我错过了什么?

问候,波格丹

0 投票
1 回答
748 浏览

python - PyOpenGL FPS 改进

我正在尝试提高 python OpenGL 程序的 FPS 速率。到目前为止,我的方法是:

现在 displayType 在 GL_POINTS 和 GL_TRIANGLES 之间改变。我目前的点数大约为 28FPS,而三角形只有大约 5-6FPS。我这个区别正常吗?我可以做些什么来提高 FPS?

0 投票
1 回答
599 浏览

opengl - wxPython、OpenGL.GLU 导入排序是否重要?

我处于以下情况。我有一个带有 GLCanvas 的模块,一个包含画布和一些按钮的 wx.Panel 以及一个显示它们的框架。现在我的进口如下:

从 OpenGL.GLU 导入 gluPerspective 从 OpenGL.GLUT 导入 glutSolidSphere

这工作正常。但是,如果我尝试在从 GLU 和 GLUT 的导入崩溃之前移动导入 wx.glcanvas 并导入 wx,并出现“异常类型:EXC_BAD_ACCESS (SIGSEGV)”。由于这个框架不是我的起始框架,我必须在其他模块中调用 import wx ,当我到达这个框架时它就会崩溃。有什么建议么 ?

编辑

所以为了更好地解释问题。我的 GLCanvas、GLPanel 和 MainWindow 有模块 1:

好的,如果我继续,现在:

如果我从同一个模块或以前不使用任何 import wx 的模块执行此操作,则它可以工作。但是我的应用程序有一个登录屏幕、配置屏幕等都使用 wx。所以现在在我想要创建 MainWin() 的代码中,我遇到了我之前提到的崩溃。

基本上我要说的是我必须从以下位置创建一个 GLPanel 和 myGLCanvas:

所以现在 wx 出现在 OpenGL 导入和 python 崩溃之前。

0 投票
3 回答
15300 浏览

opengl - glDrawArrays 与 glDrawElements

好的,所以我仍在努力让它发挥作用。我的代码的重要部分是:

从我目前所读到的关于 VBO 的内容来看,我认为这里没有任何问题。所以现在我有了顶点、法线(尚未使用)和三角形索引缓冲区。现在进行实际抽奖:

现在 glDrawArrays 工作。但是在我必须绘制三角形的情况下,它不会绘制我在 bufferTriangles 中定义的三角形(这从我读过的内容来看是正常的,因为 drawArrays 不使用索引?还是我错了?)。问题是,如果我尝试使用 glDrawElements 一切都会崩溃:

现在我在这里错过了什么?据我所知,我可能在某处传递了一个错误的指针?请注意,即使我尝试使用 glDrawElements(type, 24, GL_UNSIGNED_INT, 0) 它仍然会崩溃,即使定义的三角形数量要大得多,所以我认为它与大小没有任何关系。

问候, 博格丹

编辑: 好的,所以现在我做了一些额外的检查,这是我目前的情况:我已经将 len(triangles) 更改为 ADT.byteCount,还没有解决方案。所以我检查了我得到的所有数据,它是这样的:顶点数组包含〜60000 * 3 = 180000 GL_Float 类型的顶点条目,法线数组也是如此。由于只有 < 62535 个顶点,因此我对三角形使用 unsigned short 。所以我有 len(triangles) 是 ~135000。我还更改了 glDrawElements(GL_TRIANGLES, len(self.triangles), GL_UNSIGNED_SHORT, 0) 。我还检查了三角形数组中的所有数据都在 0 到 62534 之间,因为我在想可能是一些超出范围的索引滑过低谷。这里还有什么问题?哦,glDrawElements(GL_POINTS, ...) 是如何工作的?它还需要某种索引吗?

EDIT2 我已经更新了上面的代码,正如那里所说,现在绘制元素绘制了我的 GL_POINTS,但我不确定他从哪里获得索引?还是在 GL_POINTS 的情况下不需要它们?对于 GL_TRIANGLES,它的工作原理是这样的,带有 glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, self.bufferTriangles) 注释,但是现在元素缓冲区绑定到 0 时又需要什么样的索引?!另一件事是 glDrawElements 不会绘制 glDrawArrays 所做的所有点。为了更好地解释:

这正确地得出了我的所有观点:

这似乎比 glDrawArrays 绘制的点明显少得多。现在有趣的是,如果我通过像 10 * len(self.vertices) 这样的大小来绘制元素,它将绘制所有点(有些可能两次或更多;我可以检查一下吗?)但它不会崩溃吗?

问候

编辑3

有关数组的一些更精确的信息:

vertices - 一个浮点数组,

长度(顶点)= 180000 字节数(顶点)= 720000

三角形 - numpy.uint16 数组

len(triangles) = 353439 byteCount(triangles) = 706878 min(triangles) = 0 max(triangles) = 59999 ,所以它们应该指向有效的顶点

绘制完成:

glDrawElements(GL_TRIANGLES, len(self.triangles), GL_UNSIGNED_SHORT, 0)

更新

好的,就在我知道这应该如何工作时,我试图跳过元素的 VBO,然后就去了:

现在,这不仅可以完美地绘制我所有的三角形,而且 FPS 更好。VBO不应该更快吗?什么可能导致上述方法工作但以下崩溃:

0 投票
2 回答
397 浏览

opengl - glColorPointer 试图提高 fps

我终于达到了可以为我的顶点添加一些颜色的地步。但现在我想提高我的 FPS 速率。这是目前的情况。我有大量的顶点 (~200000) ,每个顶点都可以属于~150个类之一。每个班级的区别在于它的颜色。我目前正在绘制我的顶点,如:

一切正常,FPS 约为 60。我所有的缓冲区仅在初始化时生成。但是现在代表每个类的颜色会迅速变化,大约每毫秒一次。随着颜色也会改变,所以我必须为每次绘制重新创建颜色缓冲区,对于 200000 个顶点,我感觉 FPS 将接近 0。我试图实现的修复是保持固定颜色缓冲区,但不是实际的颜色,而是保留一个指向它所代表的类的指针。这样,只有类的 200 种颜色会改变。问题是我不知道如何在 OpenGL 中实现。这是可行的吗?有关如何执行此操作的任何指示?

0 投票
1 回答
261 浏览

python - linux中pyopengl的问题

我是初学者。
我想在 linux 中使用 pyopengl,但我有一个问题。
我尝试如下导入 pyopengl 模块:

但解释器显示此错误消息:

我该怎么办?