问题标签 [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 投票
2 回答
6041 浏览

python - pyopengl 过剩输入

出现包含 GLUT 图形的窗口后,我想在终端中输入:

理想情况下,我想将 python cmd与 GLUT 的glutKeyboardFunc 集成。我的尝试失败了(一次允许一个或另一个,而不是两者。还有窗口或终端是否有焦点的问题)。

这是一些示例代码,它显示了一个旋转的茶壶。目前,按下“m”将调用流星善良(存根),但能够输入例如“meteor 500”将是更可取的。

我可以使用glutKeyboardFunc将字符收集到一个全局字符串中,提供相同的功能效果,但是用户会盲目输入。“print somestring”允许在同一行打印,但是逗号表示在键入时不会显示输出。“print '\b'”(退格)也不能普遍工作......

基本上我不想拥有:

输入一个命令

使用限制:

  • pyopengl
  • 过剩

(尽管对于希望解决不同问题的任性未来的人们欢迎其他答案)

0 投票
1 回答
515 浏览

python - 使用 Python 在 OpenGL 中显示列表的效率?

我一直在使用 Python 包装器 PyOpenGL 自学 OpenGL 编程,现在正在使用它进行我的第一个项目。这个项目是一个音乐可视化器(与 whitecap 没有什么不同),它使用了许多独立移动和独立着色的立方体。

我目前的方法是为一个立方体创建一个显示列表,并使用 glColor 和 glTranslatef 重复更改颜色和位置,如下所示(伪代码):

通过这种方式,我可以在开始注意到帧速率之前渲染大约 10,000 个立方体,这没关系,但我希望它更快,以便我的程序可以移植到能力较差的计算机上,所以我的问题是:

渲染许多相同但独立的对象的最有效方法是什么,我会获得比现在使用显示列表更好的性能吗? 我应该使用 C 还是学习顶点缓冲?

注意:我发现禁用错误检查可以显着提升性能。

0 投票
2 回答
5844 浏览

python - 在python中迭代的最快方法

到目前为止,我从来没有担心过这个问题,但现在我需要使用大量需要由 PyOpenGL 缓冲的顶点,而且似乎 python 迭代是瓶颈。这是情况。我有一个 3D 点数组vertices,在每一步我都必须为每个顶点计算一个 4D 颜色数组。到目前为止,我的方法是:

现在我认为我不能做任何其他事情来消除循环的每个步骤中的操作,但我猜必须有一种更优化的性能方式来执行该循环。我之所以这么说是因为例如在 javascript 中,相同的演算会产生 9FPS,而在 Python 中我只能得到 2-3 FPS。

问候, 博格丹

0 投票
1 回答
2004 浏览

3d - 在 pyopengl 中渲染纹理

我正在尝试了解纹理渲染如何工作的基础知识,并使用 pyopengl 完成它,因为我已经使用它一段时间了。

我已经阅读了一些文档,从红皮书到教程,但我的程序没有渲染任何纹理 - 它只是改变(变暗)绘制对象表面的颜色。

这是相关代码:读取图像文件,设置纹理属性并启用它的函数,

以及创建对象顶点可视化列表的函数,

我不认为这是问题所在,但我正在手动计算每个对象的纹理坐标(计算“环绕球体”与从对象中心到每个顶点的向量的交点)。

如果您想查看代码的任何其他部分,请询问。任何提示或建议将不胜感激。

编辑:也许问题是我与 andglTexCoord2f()结合使用glBegin(GL_POINTS),以便将纹理应用于表面,应该与GL_QUADSGL_TRIANGLES任何其他表面一起使用?问题是我的对象的边不是由确定的多边形类型组成的:主要是三角形,但也有四边形。

0 投票
1 回答
1342 浏览

python - 带有索引的 pyOpenGL VBO

我想使用带有索引的 VBO 在 pyOpenGL 中绘制一个矩形。我为此使用了 glDrawRangeElements() 函数,但我总是在 glDrawRangeElements 行中遇到同样的错误:

WindowsError:异常:访问冲突读取 0x00000000

我尝试了很多东西,并在互联网上寻找解决方案,并且整天都在研究代码示例,所以现在我真的不知道该怎么做。如果这里有人可以帮助我,那就太好了。

这应该是创建错误的代码部分:

我不得不承认,我还没有真正了解所有这些事情,只是想理解它,因为我需要它用于一个项目,所以如果到目前为止我忽略了任何其他错误,请告诉我;)

提前致谢

0 投票
1 回答
1829 浏览

opengl - opengl用鼠标选择球体

我在 3d 空间中有许多球体,用户应该能够通过鼠标单击来选择它们。现在我已经看到了一些使用 gluUnProject 的例子,所以我试了一下。所以我有(如果我错了,请在每一步纠正我,因为我不能 100% 确定它的任何部分):

然后,单击鼠标的 x 和 y 以及球体中心的位置:

因此,因为我的 3d 几何体一点也不好,我计算两个点作为射线起点和终点,进入 2d 3 次,一次消除一个维度,并计算我的线和球体中心之间的距离。如果这些距离中的任何一个大于我的球体射线,则它不会被点击。我认为距离的公式是正确的,但以防万一:

现在代码似乎在起始位置工作正常。但是在您使用鼠标并旋转屏幕一点点之后,就再也没有像预期的那样工作了。

0 投票
1 回答
477 浏览

opengl - Windows上的pyOpenGL颜色拾取

我有需要跨平台的 wxPython + pyOpenGL 应用程序。现在为了选择,我实现了一个颜色选择方案,基本上如下:

现在对于 init_color_buffers:

现在这是在 MacOS 上编写并完美运行的。但是现在当我在 Windows 上尝试它时,它根本不起作用。创建的颜色字典只是一个 {(0, 0, 0): last_index} 并且对我的任何项目的任何点击也会返回 (0, 0, 0)。现在我真的很困惑我在这里做错了什么,特别是因为在 MacOS 上一切正常。我唯一的猜测是 glReadPixels 在 Windows 上无法正常工作,或者在 Windows 上的 wxPython 以某种方式搞砸了?!

任何帮助将不胜感激。

问候, 博格丹

0 投票
1 回答
1049 浏览

python - uv映射python OpenGL三角形

我试图用pyOpenGL显示一个简单的立即模式纹理多边形集,但没有运气。我已经将一些代码拼凑在一起,这些代码加载了一些几何数据,并且一切正常,据我所知,我有所有代码可以向它添加纹理,但只是得到白色多边形。

这是代码的重要部分:

0 投票
1 回答
2357 浏览

python - PyOpengl 和 PyQt 性能

我编写了一个 Wavefront OBJ 加载器,它可以工作,但 FPS 在 500 个多边形后下降到 ~3,1000 个多边形等于 ~10 秒延迟,2000+ 个多边形等于冻结和崩溃。

我的 C++/Qt 应用程序加载大约 15-20 FPS 的 100 万个多边形,我怀疑 PyOpengl(ctypes) 和 PyQt(sip) 包装器。

有没有人试图将高分辨率模型加载到 PyOpengl 和 PyQt 应用程序中来帮助我?

编辑:我为 OBJ 加载器使用了“顶点缓冲区对象”,所以与 CPU 无关。

0 投票
1 回答
581 浏览

python - 我无法在 pyOpenGL 画布和 wxpanel 上的按钮之间进行通信……我不确定如何绑定事件。

我实际上是从用户“Fenikso”那里借来的大部分内容:将 wxGLCanvas 添加到 wxPanel 问题

我添加了一个简单的函数来测试 wxpanel 和 openGL 画布之间的通信。它有效....直到我尝试从面板按钮与画布进行通信。:P 首先,我无法从面板与画布进行通信。绑定到按钮的函数未能更新球体的位置。其次,它非常滞后。我将尝试减慢控制动画的功能,但我想知道是否有什么我应该做的。加快一点?