Panda3Dの細かい使い方 - Python

Posted: / Modified:

概要

私が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 自作ゲーム