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()
    
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

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

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

    cd <先ほど保存したディレクトリpython hoge.py
    
  4. 3次元モデルにテクスチャがマッピングされるので確認する.
  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()
    
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

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

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

    cd <先ほど保存したディレクトリpython hoge.py
    
  4. 平行光源の効果(全体が少し暗くなる。およそ右側の面だけが明るい)を確認する
  5. マウス操作
    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)

    結果を確認したら,右上の「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()
    
  2. テキストファイルを,保存する.

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

  3. Python プログラムの実行

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

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

    cd <先ほど保存したディレクトリpython hoge.py
    
  4. カメラが自動で移動するので確認する.

    結果を確認したら,右上の「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
    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
    
  3. 画面が出るので確認する
  4. マウス操作
    • 左ボタンを押しながらマウスを動かす: 視点移動(上下左右)
    • 右ボタンを押しながらマウスを動かす: 視点移動(前後)