Panda3D SDK のインストール,サンプルプログラムの実行(3次元のゲームエンジン)(Python を使用)(Windows 上)

Panda3D は,オープンソースのソフトウェア,3次元ゲーム,可視化,シミュレーションの機能を持つ.

このページでは、3次元のゲームエンジン Panda3D 1.11 SDK (devel 版) のインストールについて説明する.「devel 版」とある通り、リリース前のものを事前に試したいときに使う.

目次

  1. Panda3D のダウンロードとインストール
  2. サンプルプログラムを実行してみる
  3. Panda 3D の主要機能
  4. art-gallery.zip の中の .egg 形式ファイル
  5. 3次元モデルデータの表示プログラムの例

サイト内の関連ページ

先人に感謝.

関連する外部ページhttp://www.panda3d.org/download.php?sdk&version=devel

前準備

Python 3.12 のインストール

インストール済みの場合は実行不要。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。

REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent --accept-source-agreements --accept-package-agreements
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul

関連する外部ページ

Python の公式ページ: https://www.python.org/

AI エディタ Windsurf のインストール

Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。

winget install --scope machine --id Codeium.Windsurf -e --silent --accept-source-agreements --accept-package-agreements

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

Panda3D 1.11 SDK のインストール

  1. Windows で,管理者権限コマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)。
  2. 使用する Python のバージョンの確認
    python --version
    
  3. Panda3d 最新版のインストール
    python -m pip install panda3d
    

公式版 (1.10.15) のサンプルプログラムをダウンロードし、実行してみる

devel 版なので、サンプルプログラムが同封されていません. 公式版 (1.10.15) のサンプルプログラムをダウンロードし、インストールしてみる.

  1. 公式版 (1.10.15) のサンプルプログラムをダウンロードし,展開(解凍)する.

    https://www.panda3d.org/download/panda3d-1.10.15/panda3d-1.10.15-samples.zip

  2. ball-in-maze を実行してみる

    Windowsコマンドプロンプトで,次のコマンドを実行

    python .\panda3d-1.10.15\samples\ball-in-maze\main.py
    
  3. ゲーム画面が開けば OK.

    ボールをゴールまでもっていくなど,遊んでみよう. このゲームは,「玉」と「壁」の衝突に関するデモである

Panda 3D の主要機能

上で準備したサンプルプログラムを使い,次の機能を試してみる

光源と影

  1. Windowsコマンドプロンプトで,次のコマンドを実行
    python .\panda3d-1.10.15\samples\shadows\basic.py
    
  2. スポットライト,陰影,影が表現できていることを確認する.(見て楽しむ)
  3. もともとのプログラムで,光源を指定している部分は次の通り

テクスチャ

  1. Windowsコマンドプロンプトで,次のコマンドを実行
    python .\panda3d-1.10.15\samples\bump-mapping\main.py
    
  2. 模様やでこぼこが表現できている.(見て楽しむ). マウス操作で回転できる.ESC キーで終了.

art-gallery.zip の中の .egg 形式ファイル

  1. ダウンロードと展開(解凍)

    次のファイルをダウンロードし,展開(解凍)する.

    https://www.panda3d.org/download/noversion/art-gallery.zip

  2. サブディレクトリの下に,ファイル名の末尾が「-egg.zip」のファイルがあるので,展開(解凍)する.
  3. 展開すると,拡張子 .egg のファイルや画像ファイルなどができることを確認

    拡張子 .egg のファイルは 3次元モデルデータ のファイルである.

    3次元モデル:形のデータ.拡大,縮小,移動,変形できるから「モデル」

  4. pview コマンドで,3次元モデルデータの表示ができることを確認する.

    pview コマンドは,Panda 3D に付属している,3次元モデルデータの表示プログラム.

    * .eeg ファイルによっては「灰色」の表示しか出ない場合がある

    pview <ファイル名>
    

    実行例

    * マウス操作

    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)

3次元モデルデータの表示プログラム

Wavefront OBJ 形式ファイルの表示

  1. Wavefront OBJ 形式ファイルを準備する

    説明のため Wevefront OBJ形式ファイルを使う. この資料で使用している Wevefront OBJ形式ファイル次からダウンロードできる

  2. テキストファイルの中身を次のように書く
    import direct.directbase.DirectStart
    model = loader.loadModel( "sample.obj" )
    model.reparentTo( render )
    base.cam.setPos( 0, -500, 0 )
    base.cam.lookAt( 0, 0, 0 )
    
    base.run()
    
  3. テキストファイルを,保存する.

    ファイル名は何でもよいが、日本語などの全角文字は避ける.拡張子は「.py」にする.

  4. 実行する.
  5. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページ »にまとめ

    python
    

    実行結果例

    * マウス操作

    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)

キーボードの矢印キーによる操作

今度は,キーボードの矢印キーを使うプログラム

  1. 今度は、テキストファイルの中身を次のように書く
    import direct.directbase.DirectStart
    model = loader.loadModel( "sample.obj" )
    model.reparentTo( render )
    base.cam.setPos( 0, -500, 0 )
    base.cam.lookAt( 0, 0, 0 )
    
    def forward( ):
        model.setY( model.getY( ) - 10 )
    def backward( ):
        model.setY( model.getY( ) + 10 )
    def right( ):
        model.setH( model.getH( ) - 10 )
    def left( ):
        model.setH( model.getH( ) + 10 )
    base.accept( "arrow_up",  forward )
    base.accept( "arrow_down", backward )
    base.accept( "arrow_right", right )
    base.accept( "arrow_left", left )
    
    base.run()
    
  2. テキストファイルを,保存する.

    ファイル名は何でもよいが、日本語などの全角文字は避ける.拡張子は「.py」にする.

  3. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページ »にまとめ

    python
    

    実行結果例

    * マウス操作

    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)

    * キーボードの矢印キーによる操作もできる

Wavefront OBJ 形式ファイルの読み込み

1. 前準備

  1. c:\Program Files\Python38\lib\site-packages\panda3d\models\ を開くと、「.egg.gz」のファイルがあることを確認

    これらは 3次元モデルのファイル

    「無いよ!」というときは、別のディレクトリを探す。

  2. このディレクトリに、次のファイルをダウンロードする

2. Wavefront OBJ 形式ファイルの読み込み

  1. テキストファイルの中身を次のように書く
    テキストエディタを用いてファイルを作成する.
    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
    
    class HelloWorld(ShowBase):
    
        def __init__(self):
            ShowBase.__init__(self)
    
            self.scene = self.loader.loadModel("models/environment")
            self.scene.reparentTo(self.render)
            self.scene.setScale(1, 1, 1)
            self.scene.setPos(0, 0, 0)
    
            self.circle = self.loader.loadModel("models/circle.obj")
            self.circle.reparentTo(self.render)
            self.circle.setScale(1, 1, 1)
            self.circle.setPos(-6, 20, 0)
    
            self.cone = self.loader.loadModel("models/cone.obj")
            self.cone.reparentTo(self.render)
            self.cone.setScale(1, 1, 1)
            self.cone.setPos(-4, 20, 0)
    
            self.cube = self.loader.loadModel("models/cube.obj")
            self.cube.reparentTo(self.render)
            self.cube.setScale(1, 1, 1)
            self.cube.setPos(-2, 20, 0)
    
    
            self.cylinder = self.loader.loadModel("models/cylinder.obj")
            self.cylinder.reparentTo(self.render)
            self.cylinder.setScale(1, 1, 1)
            self.cylinder.setPos(0, 20, 0)
    
    
            self.plane = self.loader.loadModel("models/plane.obj")
            self.plane.reparentTo(self.render)
            self.plane.setScale(1, 1, 1)
            self.plane.setPos(2, 20, 0)
    
    
            self.sphere = self.loader.loadModel("models/sphere.obj")
            self.sphere.reparentTo(self.render)
            self.sphere.setScale(1, 1, 1)
            self.sphere.setPos(4, 20, 0)
    
    
            self.torus = self.loader.loadModel("models/torus.obj")
            self.torus.reparentTo(self.render)
            self.torus.setScale(1, 1, 1)
            self.torus.setPos(6, 20, 0)
    
    app = HelloWorld()
    app.run()
    
  2. テキストファイルを,保存する.

    ファイル名は何でもよいが、日本語などの全角文字は避ける.拡張子は「.py」にする.

  3. 実行する.

    * 参考のため,Visual Studio Code で Panda3d を使う手順を別のページで説明している.

    Windowsコマンドプロンプトを使いたい場合には, 次のコマンドを実行する.

    cd <先ほど保存したディレクトリpython hoge.py
    
  4. プリミティブが表示されるので確認する.
  5. マウス操作
    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)

    結果を確認したら,右上の「x」をクリックして終了. 

演習問題:上の手順で3次元モデルを表示しなさい.マウス操作も行いなさい.