2015-10-07 197 views
1

雖然後面的this教程介紹瞭如何在python中使用panda3d,並編寫了一個簡單的3D街機飛行遊戲,但是在運行第5期加載某些2d GUI圖像的代碼時出現錯誤。在控制檯中的錯誤報告說:panda3d內存不足

出的內存分配4016個字節

過程與退出代碼完成134

相當多的谷歌搜索後,我仍然不知道爲什麼會這樣。 GUI元素只有幾個千字節,並且大文件加載沒有任何問題。

我正在使用panda3d v1.9和lubuntu上的python 2.7(安裝了4GB內存)。

任何幫助大大appeciated。

與圖像完整的源代碼可以發現here

+0

你確定你有足夠的內存嗎?您可以在運行腳本時跟蹤內存使用情況嗎? – CoMartel

+0

@HarryPotfleur我知道其他所有程序都沒有任何問題,即使是運行在Wine上的星際爭霸。由於我是一個非常糟糕的Linux-Newb,我沒有Linux下的RAM跟蹤經驗。從我所讀的內容來看,它似乎不像在windows下那麼容易。 – xXliolauXx

+0

在Ubuntu上,您可以通過在終端中調用'top'或'htop'來獲得Windows任務管理器的等價物。 'htop'稍微更加圖形化,易於閱讀,但您需要安裝它:'sudo apt-get install htop'。這應該是一個很好的起點。運行星際爭霸並沒有多大意義,因爲你可以用「正確的」數據庫加載殺死一個32Gb的RAM。 – CoMartel

回答

1

它運行對我來說,雖然極爲緩慢。縱觀一下,看起來你的world.bam文件需要很長時間才能加載,因爲它有很多頂點(數以百萬計),以及數千個單獨的網格,因此結構效率較低。

即使對.bam文件進行非常粗略的預處理以減少繪圖調用計數(通過加載它,調用flattenStrong(),然後再將其寫出)會導致加載和渲染時間急劇減少。然而,即便如此,它仍然存在問題,因爲該程序現在正在測試每幀每個單獨三角形的碰撞。

在這樣的飛行模擬器遊戲中,使用地形引擎和/或着色器以基於高度圖動態更改地形拓撲更爲典型。這還允許您測試高度圖圖像以檢查飛機是否在地面下飛行,這比與各個三角形進行交叉檢查要有效得多。

+0

感謝您的非常好的答案。你能否解釋一下如何實現這種動態地形生成? – xXliolauXx

+0

GeoMipTerrain是純粹基於CPU的地形的類,在Panda3D手冊中有記錄。現在,根據您所需的目標硬件,可能會選擇編寫GLSL曲面細分着色器。一箇中間點是使用預鑲嵌的四邊形,並使用頂點着色器移動頂點以匹配地形高度圖。 – rdb