Panda3Dの細かい使い方 - Python
概要
私がPanda3Dを使ってきてつまづいたりした所の解決策を解説します。この記事は今後アップデートされるかもしれません。
この記事で使用しているツールのバージョン: Windows 10, Panda3D: 1.10.14, Python: 3.12.3
Panda3Dの基本的な使い方は、以下などを参照。
Programming with Panda3D — Panda3D Manual
Python+Panda3Dによるゲームプログラミング入門 Panda3Dゲームエンジンのテキストブック | 多田 憲孝 |本 | 通販 | Amazon
※アフィリエイトリンクではありません。
基本
baseとはshowbaseの事。showbaseクラスを継承したクラスのselfのこと。
from direct.showbase.ShowBase import ShowBase
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
#以下アプリの準備
#例 selfをbaseに変更しても可
self.setFrameRateMeter(True)
base.setFrameRateMeter(True)
model = self.loader.loadModel(f"model.egg", noCache=True)
model = base.loader.loadModel(f"model.egg", noCache=True)
if __name__ == "__main__":
app = MyApp()
app.run()
全般
キャッシュ
テクスチャなどを変更しても反映されない場合、キャッシュが残っているからかもしれない。
windowsの場合、キャッシュは C:\Users\You\AppData\Local\Panda3D-1.10\cache に保存されているので、必要があれば削除する。
また、読み込むときにnoCache引数をTrueにすると、キャッシュを読み込まなくなる。(キャッシュが削除されるわけではない)
model = self.loader.loadModel(f"model.egg", noCache=True)
フレームレート制限
from ctypes import windll
windll.winmm.timeBeginPeriod(1) #精度を上げる
from panda3d.core import ClockObject
globalClock = ClockObject.getGlobalClock()
globalClock.setMode(ClockObject.M_limited)
globalClock.setFrameRate(24) #24fpsに制限
windllについて
デフォルトでは、Windowsのタイマーの精度は細かい計算をするのには悪い。BiginPeriodで精度を上げる。
参考:【Solved】Limited framerate is not stable - Scripting Issues - Panda3D
透明
オブジェクトを透明にする。
node_path.setTransparency(TransparencyAttrib.MAlpha)
node_path.setAlphaScale(0.5)
透明の中に透明のオブジェクトを表示したい場合は、MDualにする?
node_path.setTransparency(TransparencyAttrib.MDual)
参考:TransparencyAttrib — Panda3D Manual
デバッグ
フレームレートの表示
self.setFrameRateMeter(True)
アナライザーの表示
現在のオブジェクトの数、頂点数などが分かる
self.setSceneGraphAnalyzerMeter(True)
参考文献
Clearing Cached Models - Pipeline - Panda3D
検索用キーワード
Python Panda3D 自作ゲーム