【问题标题】:panda3d running out of memorypanda3d 内存不足
【发布时间】:2016-01-04 20:50:01
【问题描述】:

在遵循 this 关于如何使用 python 使用 panda3d 并编写简单的 3d 街机飞行游戏的教程时,我在运行第 5 期加载一些 2d GUI 图像的代码时遇到错误。控制台中的错误报告说:

分配 4016 字节的内存不足

进程以退出代码 134 结束

经过相当多的谷歌搜索,我仍然不知道为什么会发生这种情况。 GUI 元素只有几千字节,加载较大文件的方式没有任何问题。

我在 lubuntu 上使用 panda3d v1.9 和 python 2.7(安装了 4gb RAM)。

非常感谢任何帮助。

带有图片的完整源代码可以在here找到

【问题讨论】:

  • 你确定你有足够的内存吗?您可以在运行脚本时跟踪 RAM 利用率吗?
  • @HarryPotfleur 我知道所有其他程序都可以正常运行,即使是在 Wine 上运行的星际争霸。由于我是一个非常糟糕的 Linux-Newb,我没有在 linux 下进行 RAM 跟踪的经验。根据我的阅读,它似乎不像在 windows 下那么容易。
  • 在 ubuntu 上,您可以通过在终端中调用 tophtop 来拥有相当于 Windows 任务管理器的功能。 htop 更加图形化且易于阅读,但您需要安装它:sudo apt-get install htop。这应该是一个很好的起点。运行星际争霸并没有多大意义,因为您可以通过“正确”的数据库加载来杀死 32Gb RAM。
  • @HarryPotfleur 从我在 htop 中看到的内容来看,我离我仍然可用的内存还很远......它说的是在程序运行时分配了 1.2gb 的 2.7gb。同样令我惊讶的是,当我禁用其中一个游戏声音以节省一些内存时,它一切正常。熊猫 1.9 是否有某种最大内存?
  • 我不认为熊猫的记忆力有限。如果问题不在于您的 RAM,我不知道它来自哪里。您应该尝试将您的问题作为教程的评论发布,看看是否有人遇到同样的问题

标签: python memory panda3d


【解决方案1】:

它确实为我运行,尽管非常缓慢。仔细研究一下,您的 world.bam 文件似乎需要很长时间才能加载,因为它有很多顶点(似乎有数百万个)和数千个单独的网格,因此结构效率很低。

即使是对 .bam 文件进行非常粗略的预处理以减少绘制调用计数(通过加载它、调用 flattenStrong(),然后再次将其写出)也会导致加载和渲染时间显着减少。然而,即便如此,它仍然存在问题,因为程序现在正在测试每一帧与每个三角形的碰撞。

在像这样的飞行模拟器游戏中,更典型的做法是使用地形引擎和/或着色器根据高度图动态改变地形拓扑。这还允许您针对高度图图像进行测试,以检查飞机是否在地面以下飞行,这比对单个三角形进行相交检查要高效得多。

【讨论】:

  • 感谢您提供的非常好的答案。您能否也解释一下如何实现这样的动态地形生成?
  • GeoMipTerrain 是一个纯粹基于 CPU 的地形类,在 Panda3D 手册中有说明。如今,根据您所需的目标硬件,可以选择编写 GLSL 曲面细分着色器。中间立场是使用预先细分的四边形并使用顶点着色器移动顶点以匹配地形高度图。
猜你喜欢
  • 2014-10-15
  • 2011-05-21
  • 2021-12-20
  • 2021-10-29
  • 1970-01-01
  • 2020-03-12
  • 2015-08-11
  • 2019-06-07
  • 2019-04-19
相关资源
最近更新 更多