金子邦彦研究室3次元,地図Panda3d (Python で動く3次元のゲームエンジン)Panda3d の様々な機能(テクスチャマッピング,光源,動き)

Panda3d の様々な機能(テクスチャマッピング,光源,動き)

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

サイト内の関連資料:

先人に感謝.

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


テクスチャマッピング

egg 形式ファイルの3次元モデルである c:\Program Files\Python38\lib\site-packages\panda3d\models\misc\rgbCube.egg も読み込む

  1. テキストファイルの中身を次のように書き替える
    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
    from panda3d.core import Quat
    from panda3d.core import TextureStage, TexGenAttrib
     
    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.cube = self.loader.loadModel("models/misc/rgbCube")
            self.texture1 = self.loader.loadTexture( "models/maps/envir-rock1.jpg" )
            self.cube.setTexGen( TextureStage.getDefault( ), TexGenAttrib.MWorldPosition )
            self.cube.setTexture( self.texture1 )
            self.cube.reparentTo(self.render)
            self.cube.setScale(1, 1, 1)
            self.cube.setPos(0, 20, 0)
            self.cube.setQuat( Quat( 0, 1, 1, 1 ) )
      
    app = HelloWorld()
    app.run()
    

    [image]
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

    Python プログラムの実行: 別ページ »で説明

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

    cd <先ほど保存したディレクトリpython hoge.py
    

    [image]
  4. 3次元モデルにテクスチャがマッピングされるので確認する.

    [image]
  5. マウス操作

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

平行光源

平行光源

  1. テキストファイルの中身を次のように書き替える
    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
    from panda3d.core import Quat
    from panda3d.core import VBase4, Vec3
    from panda3d.core import DirectionalLight, AmbientLight
     
    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.cube = self.loader.loadModel("models/misc/rgbCube")
            self.cube.reparentTo(self.render)
            self.cube.setScale(1, 1, 1)
            self.cube.setPos(0, 20, 0)
            self.cube.setQuat( Quat( 0, 1, 1, 1 ) )
      
            self.light1 = DirectionalLight( 'light1' )
            self.light1.setColor( VBase4( 0.9, 0.9, 1.0, 1 ) )
            self.light1.setDirection( Vec3( 1, 0, 0 ) )
            render.setLight( render.attachNewNode( self.light1 ) )
      
    app = HelloWorld()
    app.run()
    

    [image]
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

    Python プログラムの実行: 別ページ »で説明

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

    cd <先ほど保存したディレクトリpython hoge.py
    

    [image]
  4. 平行光源の効果(全体が少し暗くなる。およそ右側の面だけが明るい)を確認する

    [image]
  5. マウス操作

    [image]

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

カメラを自動で動かす

  1. テキストファイルの中身を次のように書き替える
    from math import pi, sin, cos
    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
    from panda3d.core import Quat
    from direct.task import Task
     
    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.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
     
        def spinCameraTask(self, task):
            angleDegrees = task.time * 10.0
            angleRadians = angleDegrees * (pi / 180.0)
            self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3)
            self.camera.setHpr(angleDegrees, 0, 0)
            return Task.cont
    
    app = HelloWorld()
    app.run()
    

    [image]
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

    Python プログラムの実行: 別ページ »で説明

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

    cd <先ほど保存したディレクトリpython hoge.py
    

    [image]
  4. カメラが自動で移動するので確認する.

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

    [image]

オブジェクトに動きのデータを割り当てる(アクター)

  1. テキストファイルの中身を次のように書き替える
    from math import pi, sin, cos
    from direct.showbase.ShowBase import ShowBase
    from direct.showbase.Loader import Loader
    from panda3d.core import Quat
    from direct.task import Task
    from direct.actor.Actor import Actor
     
    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.pandaActor = Actor("models/panda-model",
                                    {"walk": "models/panda-walk4"})
            self.pandaActor.setScale(0.005, 0.005, 0.005)
            self.pandaActor.reparentTo(self.render)
            self.pandaActor.loop("walk")
    
    app = HelloWorld()
    app.run()
    
  2. テキストファイルを,保存する.

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

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

    cd <先ほど保存したディレクトリpython hoge.py
    

    [image]
  3. 画面が出るので確認する

    [image]
  4. マウス操作

    [image]