问题标签 [pyglet]

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 投票
4 回答
3320 浏览

python - pyglet 显示的 numpy 数组不正确

我在使用 pyglet 显示 numpy 数组时遇到问题。我找到了一个非常相似的主题(如何使用 pyglet 显示一个 numpy 数组?),我使用过。我想以灰度显示数组,但 pyglet 用颜色显示它,请参阅图像:http: //i.stack.imgur.com/pL6Yr.jpg

如果我保存并加载数组,它可以工作(但速度慢得多):

我得到了我想要的:

i.stack.imgur.com/FCY1v.jpg

我在第一个代码示例中找不到错误:(

编辑:

非常感谢您的回答。在 Bago 的提示下,我得到了这个代码来工作:) 事实上,nfirvine 的建议是合理的,因为我只想以灰度显示矩阵。

0 投票
2 回答
355 浏览

python - Python,Pyglet,win32 API,COM​​:如果我只有一个指针,如何调用 IStream::Release?

我正在尝试修复 Pyglet 中的内存泄漏。它只发生在 win32 上,因为它涉及 IStream 对象,由 ole32.CreateStreamOnHGlobal 分配,未被释放。

您可以通过单击此处在 Pyglet 跟踪器上找到问题 #552 。

正如您在源代码中看到的那样,流的发布被遗漏为 TODO 项:

第 204 行的评论甚至包括我的问题:How to call IUnknown::Release on stream?

流在第 142 行分配。由于pyglet不依赖外部依赖,我认为我不能使用pywin32。我们在 python 端所知道的关于流对象的所有信息都是gdiplus.py 第 53 行

所以,这就是我的背景——情况和局限性。现在,我的问题 - 再次。如果我只有一个指针,我如何调用 IStream::Release?我有一个长时间运行的过程,每 5 秒左右加载不同的图像,看起来这对我来说是个问题。我可以理解 C/C++,我什至偶尔会做一些编程,但无论如何我都不是 win32 api 专家。帮助!

0 投票
1 回答
529 浏览

linux - pyglet 顶点列表未呈现(AMD 驱动程序?)

我的机器显然不会在 pyglet 中绘制顶点列表。下面的代码在窗口的不同位置呈现两个相同的形状,一个使用顶点列表,另一个使用直线draw()。直接绘制的渲染很好,而顶点列表根本不渲染。

这是 Ubuntu Lucid 中的 pyglet 1.1.2,使用 AMD Radeon HD 6450 卡和最新的 Catalyst 12.1 驱动程序。我想这一定与驱动程序等有关,因为这段代码三年前在几张 NVIDIA 卡上工作过,而且几乎直接来自 pyglet 文档。任何人都知道我需要使用什么设置,或者某个特定的驱动程序版本是否可以正常工作?

0 投票
1 回答
952 浏览

python - 根据运行时变量的值播放不同的视频文件

我有 4 个视频文件(电影的不同场景)。

当我运行播放器时,将播放一个起始场景。在该场景结束之前,假设视频播放器从外部文件中读取一个 int 值 (0-100)(所有这些都发生在运行时),并且根据该 int 值,它必须确定接下来要播放哪个场景。

伪示例:

如何让它在运行时更改视频源,具体取决于该变量?

我不关心视频文件的格式,(Avi,mp4 ...)任何工作都可以。

我不知道如何解决这个问题。我已经搜索了有可能实现此目的的东西,例如pygletGS​​treamer,但我没有找到明确的解决方案。

编辑:我有 pyglet 的基本播放器和视频播放器,我能够播放视频而不依赖于使用此代码的变量:

我该怎么办?非常感谢您提供正确方向的指导和/或一些示例代码。

提前致谢。

0 投票
1 回答
542 浏览

python - pyglet.graphics:创建 ctypes 数组时出现 IndexError

我正在用 pyglet 开发一个小游戏。当然,其中一个核心是绘制彩色矩形。我最初是通过在内存中创建图像并blit()ing 来做到这一点的,效果很好。在注意到多么丑陋、迂回和低效(是的,我分析过——ColorRect.draw()花费了大量时间并且通过这个改变变得效率提高了 10 倍)之后,我开始创建顶点列表,而不是通过pyglet.graphics.Batch(我从其中一个逐字复制了大部分代码)例子)。从那时起,我在一些低级 OpenGL 代码中遇到了一个奇怪的异常,我无法找到原因或可靠地重现该异常。

与游戏事件没有明显的关系——例如,之前没有发生任何异常情况,或者我经常想念它。由于错误发生在事件循环的某个深处,我无法轻松追踪是哪个位置更新导致它。老实说,我很难过。因此,我将把我发现的东西全都抛在脑后,并希望有某种通灵者。

我已经使用 Python 3.2.2 在 Windows 7 32 位(我可能很快会在 Ubuntu 11.10 上尝试)使用 pyglet 修订版 043180b64260(从 Goggle Code 提取并从源代码构建,1.1.4 版本)进行了尝试更难安装,因为它不会自动运行 2to3,尽管它似乎同样支持 py3k)。接下来我可能会更新到最新的 mercurial 版本,但这只是几个提交,而且这些更改似乎完全不相关。

完整的回溯(审查了一些不符合原则的路径,但请注意它在它自己的 virtualenv 中):

运行事后分析(积极地逐步执行代码,直到它碰巧不可行,因为 FPS 从 60 下降到 7)pdb显示:

  • buffers是一个整数列表;我不知道这些代表什么或它们来自哪里,但它们是从一个名为self.object_space._doomed_texturesself窗口对象在哪里)的列表中提取的。相关的评论说这个代码块释放了计划删除的纹理。我认为我没有在任何地方明确使用纹理,但谁知道 pyglet 在引擎盖下做了什么。我假设这些整数是 ID 或要销毁的纹理。
  • gl.GLuintctypes.c_ulong;的别名 因此(gl.GLuint * len(buffers))(*buffers)创建了ulong一个长度和内容相同的数组
  • 我可以在pdb提示符下评估完全相同的表达式,而不会出现错误或数据损坏。

使用 ctypes 的独立实验(在 virtualenv 之外并且没有导入 pyglet)表明,IndexError如果给数组构造函数提供了太多参数,则会引发这种情况。这是没有意义的,实验和逻辑都表明长度和参数计数必须始终匹配。

  1. 还有其他可能发生此异常的情况吗?这可能是 pyglet 的错误,还是我滥用库并错过了相关的警告?
  2. 创建和维护顶点列表的代码在调试中是否有用?它可能有什么问题。我已经盯着它看了,但是由于我对 的经验很少pyglet.graphics,所以它的用处有限。如果您想查看ColorRect代码,请发表评论。
  3. 任何其他想法可能导致这种情况?
0 投票
5 回答
2138 浏览

python - Python - 是否值得花时间在明显停滞的模块上?

为了让它快速而肮脏 - 我是一个正在努力研究 Pyglet 的新手程序员,它看起来像一个非常干净和友好的模块,不像 PyGame 这样的东西,即使用我自己没有经验的眼睛看,它也是一个野兽。

然而。PyGame 不断被很多人使用、更新和重用,并且似乎有相当多的追随者。Pyglet 自 2010 年 1 月以来一直没有更新。大多数艺术作品从未完成,只是被遗弃了——但两年后它仍在 v 1.1.4 上似乎令人不安。

因此,虽然我可能会专门询问 Pyglet 与 PyGame,但我也不是,因为它让我想知道其他可能潜伏在那里的幽灵模块,这些模块曾经有过承诺,但由于某种原因,被丢弃了或被推到角落里,并不真正相关。这些废弃的项目不值得时间和脑空间投资吗?

0 投票
1 回答
2363 浏览

pyglet - 如何在pyglet中使用顶点列表?

我正在制作一个可以在 Pyglet 中生成多个对象的脚本。在这个例子中(见下面的链接)在 3d 空间中有两个金字塔,但是每个三角形在每一帧中都被重新计算。我的目标是用大量金字塔飞来飞去,但我似乎无法弄清楚如何批量实现顶点列表。(假设这是最快的方法)。

例如,它们是否需要被索引?(batch.add_indexed(...) )

一个标准似乎是:

然后将顶点添加到batch1。最后:

那么如何进行中间步骤,将金字塔添加到顶点列表中?最后一个问题:你建议什么时候使用多批次?

谢谢!apfz

http://www.2shared.com/file/iXq7AOvg/pyramid_move.html

0 投票
2 回答
2761 浏览

python - 无法在 pyglet 中绘制()精灵

出于某种原因,我无法让 pyglet 绘制精灵。这是我的代码:

现在,当我绘制批次时,文本标签显示正确。我在窗户上看到“DING”。但是,未显示图像“hextile.png”。我尝试独立绘制精灵,但这也不起作用。然而,对图像进行 Blitting(如注释行所示)似乎工作得很好,但显然这不是我想要的功能。我想不通这个。我错过了什么?

0 投票
1 回答
1144 浏览

python - 如何在python中正确删除VBO?

我想知道如何在 python 中正确删除顶点缓冲区对象。我像这样生成我的 VBO:

有时我不得不删除一个 VBO 并创建一个新的。我想知道删除 VBO的正确方法是什么?我尝试了以下两种方法,但我不知道哪一种是正确的(而且 python 不会抱怨任何一种方式):

哪个调用是正确的?删除 VBO 是否也会释放 GPU 上的内存?

0 投票
1 回答
3781 浏览

python - 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

我正在使用 pyglet 在 python 中进行 3d 可视化,并且需要检索模型视图和投影矩阵来进行一些挑选。我使用以下方法定义我的窗口:

然后我定义了我所有的窗口事件:

当我点击时,它会打印...

和崩溃。使用 GL_MODELVIEW_MATRIX 调用 glGetFloatv 应该返回 16 个值,我不确定如何处理。我尝试定义 a = GLfloat*16 但出现以下错误:

如何检索这些矩阵?